GA

2017/04/11

MySQL 8.0.1でutf8mb4_ja_0900_as_csが導入された


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 件のコメント :

コメントを投稿