Sushi = Beer ?! An introduction of UTF8 support in MySQL 8.0 | MySQL Server Blog (ユーザーによる日本語訳: 寿司=ビール問題 : MySQL 8.0でのUTF8サポート入門 (MySQL Server Blogより) | Yakst)で言及されていた日本語用の照合順序
utf8mb4_ja_0900_as_cs
。
MySQL 8.0.1 で実装されていたので試してみた。
mysql80> SHOW COLLATION LIKE 'utf8%ja%';
+-----------------------+---------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+-----------------------+---------+-----+---------+----------+---------+
| utf8mb4_ja_0900_as_cs | utf8mb4 | 303 | | Yes | 24 |
+-----------------------+---------+-----+---------+----------+---------+
1 row in set (0.00 sec)
まずは「ハハ=パパ」問題。
(MySQLは真偽値を0(=FALSE)と1(=TRUE)で返すのでそのつもりで)
mysql80> SELECT 'ハハ' = 'パパ' COLLATE utf8mb4_ja_0900_as_cs;
+---------------------------------------------------+
| 'ハハ' = 'パパ' COLLATE utf8mb4_ja_0900_as_cs |
+---------------------------------------------------+
| 0 |
+---------------------------------------------------+
1 row in set (0.04 sec)
ハハパパケースセンシティブ。
ひらがな=カタカナ問題。
mysql80> SELECT 'ハハ' = 'はは' COLLATE utf8mb4_ja_0900_as_cs;
+---------------------------------------------------+
| 'ハハ' = 'はは' COLLATE utf8mb4_ja_0900_as_cs |
+---------------------------------------------------+
| 1 |
+---------------------------------------------------+
1 row in set (0.00 sec)
ひらがなカタカナケースインセンシティブ。
次は半角全角。
mysql80> SELECT 'ハハ' = 'ハハ' COLLATE utf8mb4_ja_0900_as_cs;
+---------------------------------------------------+
| 'ハハ' = 'ハハ' COLLATE utf8mb4_ja_0900_as_cs |
+---------------------------------------------------+
| 1 |
+---------------------------------------------------+
1 row in set (0.00 sec)
mysql80> SELECT 'はは' = 'ハハ' COLLATE utf8mb4_ja_0900_as_cs;
+---------------------------------------------------+
| 'はは' = 'ハハ' COLLATE utf8mb4_ja_0900_as_cs |
+---------------------------------------------------+
| 1 |
+---------------------------------------------------+
1 row in set (0.00 sec)
半角全角ケースインセンシティブ。
拗音。
mysql80> SELECT 'びょういん' = 'びよういん' COLLATE utf8mb4_ja_0900_as_cs;
+---------------------------------------------------------------------+
| 'びょういん' = 'びよういん' COLLATE utf8mb4_ja_0900_as_cs |
+---------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
病院≠美容院。拗音ケースセンシティブ。
最後🍣=🍺だけ俺はウインドーズでターミナルから直接打ち込めないので画像で。
ちょっと見にくいけど0。
utf8mb4_bin | utf8mb4_general_ci | utf8mb4_unicode_ci | utf8mb4_unicode_520_ci | utf8mb4_ja_0900_as_cs | |
---|---|---|---|---|---|
Hiragana-Katakana | cs (unkind) | cs (unkind) | ci (good) | ci(good) | ci(good) |
Youon | cs (good) | cs (good) | ci (critical) | ci(critical) | cs(good) |
Dakuten-Handakuten | cs (good) | cs (good) | ci (critical) | ci(critical) | cs(good) |
Wide-Narrow | cs (unkind) | cs (unkind) | ci (good) | ci(good) | ci(good) |
Sushi-Beer | cs | ci | ci | cs | cs |
おおー、結構いいセン行ってるんじゃないだろうか。
なお、斎藤さんは斉藤さんかとかそういうことを考え出すと、どうすればいいのか俺にもよくわからないけど一応センシティブ(中国語圏の人とかどうあるべきだと思うんだろう)
mysql80> SELECT '斎藤' = '斉藤' COLLATE utf8mb4_ja_0900_as_cs;
+---------------------------------------------------+
| '斎藤' = '斉藤' COLLATE utf8mb4_ja_0900_as_cs |
+---------------------------------------------------+
| 0 |
+---------------------------------------------------+
1 row in set (0.00 sec)
あとはこの設定を秘伝のmy.cnfのmysqldセクションに書き込んでおけばOK。
character_set_server はデフォルトがutf8mb4になったけれど一応ついでに。
$ vim my.cnf
..
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_ja_0900_as_cs
..
0 件のコメント :
コメントを投稿