はじめに
調べては忘れるを繰り返す彼ら(文字コード)のエトセトラについて
備忘録&アウトプットのため書き記します。
COLLATION(照合順序)
- utf8mb4_general_ciとかはCOLLATION(照合順序)の一種
- COLLATIONはどの文字とどの文字を同一に扱うかといった決まり事
- ソート時の文字ごとの重みが照合順序によって変わり、順番も変わる。
- 日本語を扱う際によく使用される照合順序はこの3つが多い。
- utf8mb4_general_ci …英字の大文字小文字を区別しない。ほかは区別する。
- utf8mb4_unicode_ci …英字の大文字小文字を区別しないし、半角全角も、ひらがなカタカナも区別しない
- utf8mb4_bin …全部区別する。文字コードがすべて。
- MySQL8.0 ではutf8mb4 のデフォルトの照合順序が utf8mb4_general_ci から utf8mb4_0900_as_ci に変更になった。
参考記事
UTFとUnicode
わかりやすくざっくりまとめられているこちらの記事をさらに粗くまとめてみた。
・Unicode世界中の文字とそれに対する 数字を紐付けたデータベースみたいなイメージ
・Unicodeには【あ→3041】,【a→0061】みたいな感じで各文字にコード(コードポイント)が紐づいている
・UTF-8はこれらのコードポイントをパソコンに理解させるために符号に変換する役割を果たす(Unicodeのコードポイントをそのままパソコンに理解させるよりもUTF-8などによる符号を使う方がバイト削減できる。らしい)
utf8とutf8mb4とutf8mb3
-
utf8mb3
は1文字で3バイト、utf8mb4
は4バイトの文字を表現できる。 -
utf8mb3
では1文字で4バイトを超えるような文字(🍣や🍺、𠮷
など)が同じものとして扱われてしまう(寿司ビール問題という美味しそうな名前がついている)。 -
utf8mb3
は公式からも非推奨と言われており、utf8mb4
が推奨されている。 - MySQLに
utf8
というcahrsetがあるがこれはutf8mb3
が使われるので注意(utf8
はutf8mb3
のエイリアスらしい)。