web-dev-qa-db-ja.com

照合と文字セットの違いは何ですか?

データベースに関して一般的な質問があります。通常、データベースでは照合という用語を使用します。文字セットとどう違うのか知りたい。照合は文字セットのサブセットだと思います。その真の場合、文字セットの下での目的の複数照合は何ですか。

24
Shameer

文字セットは記号のリストです。 [〜#〜] ascii [〜#〜]latin1latin1と比較すると、すべてのアメリカの単語を書くことができます。 latin1はすべての[〜#〜] ascii [〜#〜]文字を含み、英語の単語を書くのに十分です。それどころか、[〜#〜] ascii [〜#〜]を使用すると、たとえば「specific」、「like」などの文字のため、西ヨーロッパ固有の言語のすべての単語を書くことができなくなります。 、「õ」、「Ñ」がありません。

照合は文字間の比較についてです。これは、文字セットの文字を比較する一連のルールを定義します。

MySQLでは、照合は1つの言語に関連していることがよくあります(「latin1_swedish_ci」、「latin1_german1_ci」など)。選択クエリを注文すると、一部の言語(一部の照合では)で、「ö」で始まる単語が「o」と「p」で始まる2つの単語の間に配置されます。しかし、別の照合では、この文字は最後に完全に配置される可能性があり、結果として選択が異なります。

28
uloBasEI

前の回答と同様に、文字セットは、番号に割り当てられた文字(文字、数字、表意文字など)のセットです。それらを見るには、フォント(私たちが読んだ小さな「絵」)が必要です。 LatinXを使用することは重要でした。Xごとに同じ番号(バイト)が異なる文字を参照する可能性があるためです。

今日では、エンコーディングを選択することがより重要になっています。標準はUnicodeの最も成功した表現であるUTF-8です(ASCIIと互換性がありますが、中国語と日本語を含むすべての言語を含めるために非常に柔軟です)およびW3C。つまり、すべての文字セットが含まれます。

照合順序:これはラテン語から派生した昔ながらの単語です。つまり、コピー(原稿)をオリジナルと比較して、違い(エラーまたは変更)を見つけます。以前は非常に便利でしたが、今では文書や本はコンピューターを使用して作成されており、コピーは常にオリジナルと同じであるため、ほとんど古風です。例:イタリア語(ラテン語から派生)には「collazionare」という動詞がありますが、辞書にあり、だれもそれを使用していません。

したがって、照合は比較演算子の動作を定義します:=、>、<、<=、> = ...

もちろん、これらの演算子は、2つの文字列が同じかどうか、またはWordが別の文字列よりも「大きい」かどうかを判断するために使用されます。ソートする場合は非常に重要です。文字はすべての言語で同じ順序になっているわけではないため、照合を使用すると、Wordは別の1つを超えることはできますが、別の言語を使用することはできません。実用的な例については、[1]を参照してください。

  • "bin"照合は最も厳密です:SELECT "b" = "B" => FALSE

  • "ci"照合は大文字と小文字を区別しません:SELECT "b" = "B" => TRUE

  • 「一般」はいくつかの違いを無視する傾向があります:SELECT "a" = "à" => TRUE

  • その他は1つ以上の言語に固有です。 「スウェーデン語」の例(スウェーデン語がデフォルトであることが多い理由はわかりません)

すべての照合の動作が詳細に記述されているWebサイトをまだ探しています。これらの例は私の経験によるものです。

[1] http://www.olcot.co.uk/sql-blogs/revised-difference-between-collat​​ion-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as

6
Francesco