utf8とutf8mb4の違い【MySQL】

それぞれ以下のように違います。

  • utf8 → 1~3バイトまで対応
  • utf8mb4 → 1~4バイトまで対応

 

(なぜ2種類あるのかはMySQLの歴史によるものらしいのですが、私はいまいち分かっていないので詳しく知りたい方はググってみてください・・。)

保存できる文字の違い

これはつまり、UnicodeのコードポイントがU+FFFFを超える文字は、utf8では保存できないってことです。

例えば

  • 崎(U+5D0E)←保存できる
  • 﨑(U+FA11)←保存できる
  • 😀(U+1F600)←保存できない
  • 𩸽(U+29E3D)←保存できない
    ※ちなみにこの漢字はホッケと読みます

みたいな感じ。

絵文字などを保存したい場合はutf8mb4を使わないといけません。

MySQLのutf8はUTF-8ではないのでは・・?

UTF-8は「世界中の文字を1つの文字コードで表そうぜ!」な文字集合であるUnicodeを表すための文字符号化方式の1つなわけですが

本来UTF-8は、1~4バイトで文字を表すルールです。

 

なので、MySQLのutf8はそもそもUTF-8とは呼べないわけです。

だって1~3バイトまでしか対応してないんだから。偽物ですよ偽物。

 

なので、はじめてこのルールを知ったとき

utf8って名前なのに3バイトしか対応してないのかよ!
てかutf8mb4が4バイト対応なんだったら、むしろutf8mb4が本物のUTF-8じゃねえか!名前変えろよおおおおお!!

と私は強く思ったのですが、そう思ったのは私だけではないはず・・。

 

まぁそんなわけで

今後MySQLを使ったアプリを作っていく場合は、utf8ではなくてutf8mb4を選択した方が良いと思われます・・。

仕様が変更される可能性あり

MySQLの公式を見てみると、以下のように書かれています。

MySQL の今後のバージョンでは、utf8 が 4 バイトの utf8 になり、3 バイトの utf8 を指定するときに utf8mb3 を示す必要が生じる可能性があります。

引用:https://dev.mysql.com/doc/refman/5.6/ja/charset-unicode-utf8mb3.html

utf8mb3 文字セットは非推奨であり、将来の MySQL リリースで削除される予定です。 かわりに utf8mb4 を使用してください。

utf8 は現在 utf8mb3 のエイリアスですが、ある時点では utf8 が utf8mb4 への参照になることが予想されます。 utf8 の意味があいまいにならないように、utf8 ではなく文字セット参照に utf8mb4 を明示的に指定することを検討してください。

引用:https://dev.mysql.com/doc/refman/8.0/ja/charset-unicode-utf8.html

 

なので、この謎仕様は変更されるかもしれません。(これが本来のあるべき形ですよね😑)

 

おわり

コメント

タイトルとURLをコピーしました