329

MySQLのドキュメントを読むことができますが、かなり明確です。しかし、どの文字セットを使用するかをどのように決定するのでしょうか? 照合はどのデータに影響しますか?

2つの説明と選び方をお願いしています。

4

4 に答える 4

532

MySQLドキュメントから:

文字セットは、記号とエンコーディングのセットです。照合は、文字セット内の文字を比較するための一連の規則です。架空の文字セットの例で区別を明確にしましょう。

「A」、「B」、「a」、「b」の 4 文字のアルファベットがあるとします。「A」= 0、「B」= 1、「a」= 2、「b」= 3 のように、各文字に数字を付けます。文字「A」は記号で、数字 0 は「A」のエンコードです。であり、4 文字すべてとそのエンコーディングの組み合わせが文字セットです。

ここで、2 つの文字列値 'A' と 'B' を比較したいとします。これを行う最も簡単な方法は、エンコーディングを確認することです。'A' は 0、'B' は 1 です。0 は 1 より小さいので、「A」は「B」より小さいと言います。ここまでで、文字セットに照合を適用しました。照合順序は一連の規則 (この場合は 1 つの規則のみ) です: 「エンコーディングを比較する」。この最も単純な照合をバイナリ照合と呼びます。

しかし、小文字と大文字が同等であると言いたい場合はどうでしょうか? 次に、少なくとも 2 つのルールがあります。(1) 小文字の 'a' と 'b' を 'A' と 'B' と同等のものとして扱います。(2) 次に、エンコーディングを比較します。これを大文字と小文字を区別しない照合と呼びます。バイナリ照合よりも少し複雑です。

実際には、ほとんどの文字セットには多くの文字があります。「A」と「B」だけでなく、アルファベット全体、場合によっては複数のアルファベット、または数千の文字を含む東洋の書記体系と、多くの特殊記号や句読点があります。また、実際には、ほとんどの照合には多くの規則があります。大文字と小文字を区別しないだけでなく、アクセントを区別しない (「アクセント」はドイツ語の「ö」のように文字に付けられたマークです) および複数文字のマッピング (「 ö' = 'OE' (ドイツ語の 2 つの照合順序のいずれか)。

于 2008-12-04T17:02:36.510 に答える
212

文字エンコーディングは、メモリに収まるように文字をエンコードする方法です。つまり、文字セットが ISO-8859-15 の場合、ユーロ記号 € は 0xa4 としてエンコードされ、UTF-8 では 0xe282ac になります。

照合は、文字を比較する方法です。latin9 では、次のような文字があります。e é è ê fバイナリ表現で並べ替えると、一致e f é ê èしますが、照合がたとえばフランス語に設定されている場合は、思った順序で並べられます。であり、これは のすべてe é è êが等しく、次にfです。

于 2008-12-04T17:06:24.957 に答える
21

文字セットは、書かれたすべてのグリフのサブセットです。文字エンコーディングは、これらの文字を数値にマップする方法を指定します。UTF-8 や UTF-16 などの一部の文字エンコードでは、ユニバーサル文字セットの任意の文字をエンコードできます。US-ASCII や ISO-8859-1 などの他のものは、1 文字あたりそれぞれ 7 ビットと 8 ビットを使用するため、小さなサブセットしかエンコードできません。多くの標準では文字セットと文字エンコーディングの両方が指定されているため、「文字セット」という用語は「文字エンコーディング」の代わりに自由に使用されることがよくあります。

照合順序は、並べ替えのために文字を比較する方法を指定する規則で構成されます。照合規則はロケール固有の場合があります。2 つの文字の適切な順序は言語によって異なります。

文字セットと照合順序の選択は、アプリケーションが国際化されているかどうかにかかっています。そうでない場合、どのロケールをターゲットにしていますか?

サポートする文字セットを選択するには、アプリケーションを検討する必要があります。ユーザー提供の入力を保存している場合、ソフトウェアが最終的に使用されるすべてのロケールを予測するのは難しい場合があります。それらすべてをサポートするには、最初から UCS (Unicode) をサポートするのが最善かもしれません。ただし、これにはコストがかかります。多くの西ヨーロッパの文字は、文字ごとに 1 バイトではなく 2 バイトのストレージを必要とするようになりました。

データベースが照合を使用してインデックスを作成し、後でそのインデックスを使用して並べ替えられた結果を提供する場合、適切な照合を選択するとパフォーマンスが向上します。ただし、照合規則は多くの場合ロケール固有であるため、別のロケールの規則に従って結果を並べ替える必要がある場合、そのインデックスは役に立ちません。

于 2008-12-04T17:42:29.627 に答える