MySQL 8.0 リファレンスマニュアル


10.8.6 照合順序の効果の例

例 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_ciutf8_unicode_ci のソートプロパティーの結果です (示されたソートは、German DIN 5007 標準に従って行われています)。


関連キーワード:  文字, セット, 照合, 順序, Bär, 効果, カラム, リファレンス, COLLATE, サポート