13

sqlite3のドキュメントによると、

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

照合順序とは何ですか? BINARY 照合順序とは何ですか?

4

2 に答える 2

6

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

于 2009-04-28T21:20:52.010 に答える
4

バイナリ照合は、Unicode テーブルのように、文字列をバイト単位で比較します。例: A、B、a、b。大文字と小文字を区別しない (NOCASE) 順序は、a、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
于 2015-08-06T15:26:39.197 に答える