2021-07-31

MySqlにおける文字コード「utf8」と「utf8mb4」の違いについて

MySqlでデータベースを作成する際、データベースに文字コードを指定します。WEBコンテンツの文字コードを「UTF-8」で指定していたので、それに合わせてデータベース側も「utf8」を指定するのが適切だと考え、特に意識せず使用していました。

先日、ある書籍を読んでいた際「utf8mb4」という見慣れない文字コードがMySql側で使用されていました。「utf8」とは、どう異なるのでしょうか。気になったので調査してみました。

「UTF-8」と「utf8」と「utf8mb4」

結論からいうと、utf8mb4utf8は別物。違いを一言で言うなら扱えるバイト数が異なるという点です。

utf8は1~3バイトまで対応。utf8mb4は1~4バイトまで対応しています。

ちなみに、WEBサイト側で指定するUTF-8は1~4バイトに対応しています。MySqlのutf8は1~3バイトまで対応。つまりUTF-8とMySqlのutf8は別物ということがわかりました。文字コードにはあまり詳しくないので、驚きました。UTF-8はどこでも共通のUTF-8だと思っていたのに…。

文字コード特徴
utf8mb4MySqlにおけるUTF-8。1文字を1~4バイトで扱う
utf8MySqlにおけるUTF-8。1文字を1~3バイトで扱う
UTF-8一般的なUTF-8文字コード。1文字を1~4バイトで扱う

参考:ウィキべディア UTF-8

https://ja.wikipedia.org/wiki/UTF-8

スポンサーリンク

実際の運用面ではどう影響するのか

つまり、4バイト以上の文字をデータベースに挿入することができるか否か、ということでしょう。絵文字、UnicodeのコードポイントがU+FFFFを超える文字はutf8では保存できないということです。

これまでutf8でデータベースを組んできましたが、得に問題ありませんでした。実際には挿入しなければならない文字が、挿入できていなかった可能性はあります。

まとめ

新規でMySqlを用いたシステムを構築する場合は、utf8ではなくutf8mb4を使用するようにしましょう。utf8を使用する理由はないかと思います。