2009-04-28 24 views
8

sqlite3 documentationによれば、各 列名以下sqliteインデックスの作成時にCOLLATEキーワードは何をしますか?

COLLATE句は、その 列のテキストエントリのために使用される照合 シーケンスを定義します。デフォルトの照合順序 は、 に定義されている照合順序で、CREATE TABLE 文のその列です。または、照合シーケンス が別途定義されていない場合は、組み込みの BINARY照合シーケンスが使用されます。

照合シーケンスとは何か、照合順序は何ですか?

答えて

5

これは、SQLエンジンがデータを内部的に注文する方法です。バイナリ照合は、バイナリ比較を行います。私はそれを定量化していませんが、ビットパターンをチェックするので、一般的に最も速い照合です。つまり、大文字と小文字の区別がありません。

1

バイナリ照合では、ユニコードテーブルのように、文字列がバイト単位で比較されます。例:A、B、a、b。 大文字小文字を区別する順序は、a、A、b、Bです。

バイナリ照合の利点は、文字列の比較が非常に簡単で高速なので、その速度です。一般的に、バイナリのインデックスはソートに期待される結果を生成しない場合がありますが、完全一致の場合は便利です。

また、大文字と小文字が区別されるクエリにも影響します。

あなたは、これらの値を持つ列がある場合:あなたはCOLLATE NOCASEを使用して列を作成している場合は「AA」、「AA」

select * from table where col = 'aa' 

それは「AA」と「AA」の両方を返しますが。それ以外の場合は、指定しなかった場合は 'aa'だけが返されます。

あなたはまた、

select * from table where col = 'aa' COLLATE NOCASE 
(これはあなたがCOLLATE NOCASEを使用して列を作成した場合、その後遅い)クエリでそれを指定することができます
関連する問題