TL;DR
- MySQL Bugs: #92899: Incorrect uniqueness determination with equality symbols を見て思ったことのメモ
- 少なくとも
utf8mb4_0900_ai_ci
にとっては'=' = '≠'
がTRUE
MySQL 8.0の
utf8mb4
のデフォルト照合順序として utf8mb4_0900_ai_ci
というのがあって( default_collation_for_utf8mb4 で多少は変えられる)、これは kamipoのハハ=パパ問題 を引き起こす照合順序として日本人には知られている(と思う。といいな。広まれ!)
で、その
utf8mb4_0900_ai_ci
が今度はイコール=ノットイコール問題を発症したらしい。mysql80 34> SELECT '=' = '≠';
+-------------+
| '=' = '≠' |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
…はは。
ちょっと気になって調べてみた感じ、どうもUCA準拠の照合順序では 最初っからそうだったっぽい
MySQL 5.0ですらこれは引っ掛かる。
ちょっと気になって調べてみた感じ、どうもUCA準拠の照合順序では 最初っからそうだったっぽい
MySQL 5.0ですらこれは引っ掛かる。
mysql50> SELECT '=' = '≠' COLLATE utf8_unicode_ci;
+-------------------------------------+
| '=' = '≠' COLLATE utf8_unicode_ci |
+-------------------------------------+
| 1 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql50> SELECT '=' = '≠' COLLATE utf8_general_ci;
+-------------------------------------+
| '=' = '≠' COLLATE utf8_general_ci |
+-------------------------------------+
| 0 |
+-------------------------------------+
1 row in set (0.00 sec)
今まで暗黙のデフォルトが「引っ掛からない」方だったから気にならなかった、というだけのアレだったようですね。
ちなみにどんな文字が同一視されるか、については 日本MySQLユーザ会 の代表えもんこと @tmtms さんがかなり昔にまとめてくれていましたね。
ありがたやありがたや(*-人-)
0 件のコメント :
コメントを投稿