2021-07-31
MySqlにおける文字コード「utf8」と「utf8mb4」の違いについて
MySqlでデータベースを作成する際、データベースに文字コードを指定します。WEBコンテンツの文字コードを「UTF-8」で指定していたので、それに合わせてデータベース側も「utf8」を指定するのが適切だと考え、特に意識せず使用していました。
先日、ある書籍を読んでいた際「utf8mb4」という見慣れない文字コードがMySql側で使用されていました。「utf8」とは、どう異なるのでしょうか。気になったので調査してみました。
「UTF-8」と「utf8」と「utf8mb4」
結論からいうと、utf8mb4
とutf8
は別物。違いを一言で言うなら扱えるバイト数が異なるという点です。
utf8
は1~3バイトまで対応。utf8mb4
は1~4バイトまで対応しています。
ちなみに、WEBサイト側で指定するUTF-8
は1~4バイトに対応しています。MySqlのutf8
は1~3バイトまで対応。つまりUTF-8
とMySqlのutf8
は別物ということがわかりました。文字コードにはあまり詳しくないので、驚きました。UTF-8はどこでも共通のUTF-8だと思っていたのに…。
文字コード | 特徴 |
---|---|
utf8mb4 | MySqlにおけるUTF-8。1文字を1~4バイトで扱う |
utf8 | MySqlにおける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
を使用する理由はないかと思います。