sqliteのインデックスを作成するときにCOLLATEキーワードは何をしますか?
質問
sqlite3のドキュメントのによると、
それぞれを以下のCOLLATE句 列名は、照合を定義します その内のテキストエントリのために使用されるシーケンス 行。デフォルトの照合順序 以下のために定義された照合順序であります CREATE TABLEでその列 ステートメント。またはNO照合順序であれば 他に定義され、内蔵の BINARY照合順序が使用されます。
どのような照合順序がやっている、とBINARY照合順序が何であるか?
解決
これは、内部SQLエンジンの受注データという方法です。バイナリ照合順序は、バイナリ比較を行い、それが示唆するものを行います。一般的にそのそれはケースとアクセントを区別しないことを意味し、それはビットパターンをチェックして、私は、それを定量化したことがないのに、最速の照合、ます。
他のヒント
バイナリ照合は、Unicodeのテーブルのように、バイトして、文字列のバイトを比較します。例えば:A、B、B。 大文字と小文字が区別順序は次のようになります。、A、B、B
文字列の比較は速い/非常に簡単であるように、バイナリ照合の利点は、その速度です。一般的なケースでは、バイナリとインデックスは、しかし、完全一致のために、彼らが有用であることができ、ソートのために期待される結果が得られないことがあります。
COLLATE NOCASEも大文字と小文字を区別したクエリに影響します。
あなたはこれらの値を持つ列がある場合: 'AA' を、 'AA'
select * from table where col = 'aa'
あなたはCOLLATE NOCASEを使用して列を作成している場合は、それは「AA」と「AA」の両方を返します。あなたはそれを指定しなかった場合はそれ以外の場合は、それだけで「AA」を返します。
また、(あなたはCOLLATE NOCASEを使用して列を作成した場合、これはその後、遅い)、クエリでそれを指定することができます。
select * from table where col = 'aa' COLLATE NOCASE