sqliteのインデックスを作成するときにCOLLATEキーワードは何をしますか?

StackOverflow https://stackoverflow.com/questions/799840

  •  18-09-2019
  •  | 
  •  

質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top