文字コードutf8とutf8mb4の違い MySQLでは絵文字の扱いに注意

よこのじ(@yokonoji_work)です。

HTMLの記述でお馴染みの文字コードutf-8ですが、レンタルサーバーの設定でutf-8mb4というものを見かけましたので、その違いを確認してみました。

この違いを知っておかないと、MySQLにおける文字コードの不具合に悩まされるかもしれません。

この機会に文字コードutf8とutf8mb4の違いを確認しておきましょう。

文字コード utf-8 とは?

utf-8は世界で最も普及している文字コードです。

アルファベット、数字、記号といった基本的な文字を表すASCIIコードに、さらに世界中のあらゆる文字(例えばハングル文字やアラビア文字など)を加えた文字の集合体をUnicodeといいます(これには絵文字なども含まれています)。

utf-8はUnicodeに含まれる文字を符号化したもの(=コードと対応させたもの)になります。たとえば「あ」なら「E38182」といったようにコードと対応しています。

Shift-JISなどの日本語を扱える文字コードはありますが、他の文字コードで書かれた文字が文字化けするなどの問題から文字コードを使い分ける必要がありました。

こういった問題は、utf-8という世界中の文字を一つの文字コードで扱えるようになった今ではほとんどなくなっています。

文字コード utf-8mb4 とは?

utf-8mb4はデータベースMySQLで扱うための文字コードです。

utf-8は1~4バイトで文字を表現しますが、MySQLでは3バイトの文字までしか扱えないため、4バイトの文字は使用できません。

これを解決する、つまりutf-8の4バイトに該当する文字を扱えるようにしたのがutf-8mb4ということになります。

絵文字などはutf-8の4バイトに当たるので、utf-8mb4でないと絵文字が扱えないということになります。

なぜこのようなことになったかというと、これはMySQLの仕様や歴史的背景が絡むようですので、ご興味ある方は下の参考にあるリンク先などをご確認ください。