2019-3-28
MySQLのcollationに関して
結論
基本utf8mb4_bin
でいいんじゃなかろうかと個人的に思った。
ただ、ネット上の情報だと何故かutf8mb4_general_ci
を選択しているパターンが多い…なにか見逃しがあるのかもしれない。
各 collation における比較結果の表
各 collation で「a」と「A」や「🍣」と「🍺」等を比較した際に同じものとして扱われるかどうかを以下にまとめた。
collation | a/A | ハ/パ | @/@ | 🍣/🍺 | ブ/ブ(結合文字) |
---|---|---|---|---|---|
utf8mb4_bin | ≠ | ≠ | ≠ | ≠ | ≠ |
utf8mb4_general_ci | = | ≠ | ≠ | = | ≠ |
utf8mb4_unicode_ci | = | = | = | = | = |
結合文字
UTF8 では「ボ」という文字を表現する場合、合成文字(U+30dc)と結合文字(U+30db U+3099)の2通りの方法が存在する。
結合文字は名前の通り、「ホ(U+30db)」と「゛(U+3099)」という風に2つの文字を結合して1つの文字として表現する方法。
どちらも同じ「ボ」だが、utf8mb4_bin
だと別物扱いになる。
結合文字に関しては以前 Unicode 正規化に関して調べた際に少し触れた。
結合文字に関してはそもそもレアな点と、合成文字と結合文字を同じものとして扱ってほしい場合は問題が大量にあるutf8mb4_unicode_ci
を選択しなければならないので無視するしかないと思う。
参考
寿司ビール問題 ① 初心者 → 中級者への STEP20/25 - Qiita
寿司=ビール問題 : MySQL 8.0 での UTF8 サポート入門 (MySQL Server Blog より) | Yakst