文字コードutf-8とutf-8mb4の違い

よこのじ(@yokonoji_work)です。

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

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の仕様や歴史的背景が絡むようですので、ご興味ある方は下の参考にあるリンク先などをご確認ください。