utf8mb4_0900_bin

とみたまさひろ

2019-08-19

MyNA会 2019年8月

自己紹介

utf8mb4_0900_bin

utf8mb4_0900_bin

  • Collation名
  • MySQL 8.0.17 から登場

Collation

  • 文字のソート順
  • 文字の一致/不一致
  • デフォルトの utf8mb4_0900_ai_ci では
    • a = A = , 1 =
    • = = = = =
    • 平成 =
    • 🍣 != 🍺

https://suzuri.jp/tmtms/1934346/t-shirt/s/sumi

utf8mb4_bin との違い

mysql> SHOW COLLATION LIKE 'utf8mb4%bin';
+------------------+---------+-----+---------+----------+---------+---------------+
| Collation        | Charset | Id  | Default | Compiled | Sortlen | Pad_attribute |
+------------------+---------+-----+---------+----------+---------+---------------+
| utf8mb4_0900_bin | utf8mb4 | 309 |         | Yes      |       1 | NO PAD        |
| utf8mb4_bin      | utf8mb4 |  46 |         | Yes      |       1 | PAD SPACE     |
+------------------+---------+-----+---------+----------+---------+---------------+

CollationのPAD属性

  • 8.0 から追加
  • PAD SPACE - 末尾空白文字の有無を無視する
    • 5.7までの振る舞い
  • NO PAD - 末尾空白文字の有無を無視しない
    • 8.0からの新しいCollationだけ
    • utf8mb4_*0900_*

PAD SPACE と NO PAD

mysql> set names utf8mb4 collate utf8mb4_unicode_520_ci;
mysql> select 'a' = 'a   ';
+--------------+
| 'a' = 'a   ' |
+--------------+
|            1 |
+--------------+

mysql> set names utf8mb4 collate utf8mb4_0900_ai_ci;
mysql> select 'a' = 'a   ';
+--------------+
| 'a' = 'a   ' |
+--------------+
|            0 |
+--------------+

utf8mb4_0900_bin ができた経緯(妄想)

  • utf8mb4_bin にも NO PAD バージョンが欲しい
  • 互換のために utf8mb4_bin は変更できない
  • utf8mb4_0900_bin 新設

utf8mb4_bin と utf8mb4_0900_bin

mysql> set names utf8mb4 collate utf8mb4_bin;
mysql> select 'a' = 'a   ';
+--------------+
| 'a' = 'a   ' |
+--------------+
|            1 |
+--------------+

mysql> set names utf8mb4 collate utf8mb4_0900_bin;
mysql> select 'a' = 'a   ';
+--------------+
| 'a' = 'a   ' |
+--------------+
|            0 |
+--------------+

名前がイマイチな気がする 🤔

Collation

デフォルト: utf8mb4_0900_ai_ci

要素 意味
utf8mb4 4バイトUTF-8
0900 Unicode 9.0.0
ai アクセントの違いを無視
ci 大文字小文字の違いを無視
  • 0900 は Unicode 9.0.0 準拠のCollationという意味
  • utf8mb4_0900_bin は Unicode 準拠じゃない
  • NO PADなCollationは0900だけだからこうなった?
  • それにしてもなー🤔

測ってないけどたぶん utf8mb4_bin よりも速いから
みんな utf8mb4_0900_bin を使うといいと思う