例 1: ドイツ語のウムラウトのソート
テーブル T
のカラム X
に次の latin1
カラムの値が設定されているとします。
Muffler
Müller
MX Systems
MySQL
さらに、次のステートメントを使用してカラムの値を取得するとします。
SELECT X FROM T ORDER BY X COLLATE collation_name;
次の表に、別の照合順序で ORDER BY
を使用した場合に得られる値の順序を示します。
latin1_swedish_ci |
latin1_german1_ci |
latin1_german2_ci |
---|---|---|
Muffler | Muffler | Müller |
MX Systems | Müller | Muffler |
Müller | MX Systems | MX Systems |
MySQL | MySQL | MySQL |
この例でソート順の違いを生じさせている文字は、頭に 2 つの点が付いた U (ü
) であり、これはドイツ語で「U ウムラウト」と呼ばれているものです。
最初のカラムには、スウェーデン語/フィンランド語の照合ルールを使用した
SELECT
の結果が示されています。この照合ルールによると、U ウムラウトは Y とソート順が一致します。2 番目のカラムには、German DIN-1 ルールを使用した
SELECT
の結果が示されています。この照合ルールによると、U ウムラウトは U とソート順が一致します。3 番目のカラムには、German DIN-2 ルールを使用した
SELECT
の結果が示されています。この照合ルールによると、U ウムラウトは UE とソート順が一致します。
例 2: ドイツ語のウムラウトの検索
使用される文字セットと照合順序だけが異なる次の 3 つのテーブルがあるとします。
mysql> SET NAMES utf8;
mysql> CREATE TABLE german1 (
c CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_german1_ci;
mysql> CREATE TABLE german2 (
c CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_german2_ci;
mysql> CREATE TABLE germanutf8 (
c CHAR(10)
) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
各テーブルには次の 2 つのレコードが含まれます。
mysql> INSERT INTO german1 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO german2 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO germanutf8 VALUES ('Bar'), ('Bär');
上記の照合順序の 2 つには A = Ä
の等式が含まれ、1 つにはこのような等式はありません (latin1_german2_ci
)。 そのため、比較では次の結果が得られます。
mysql> SELECT * FROM german1 WHERE c = 'Bär';
+------+
| c |
+------+
| Bar |
| Bär |
+------+
mysql> SELECT * FROM german2 WHERE c = 'Bär';
+------+
| c |
+------+
| Bär |
+------+
mysql> SELECT * FROM germanutf8 WHERE c = 'Bär';
+------+
| c |
+------+
| Bar |
| Bär |
+------+
これはバグではなく、latin1_german1_ci
と utf8_unicode_ci
のソートプロパティーの結果です (示されたソートは、German DIN 5007 標準に従って行われています)。