😀

MySQLのutf8mb4は4バイトのUTF-8

2025/01/29に公開

MySQLで文字コードを設定するとき、「utf8」と「utf8mb4」を設定することができます。

これいったい何なのかと思って調べてみたところ、utf8mb4は「4バイトのUTF-8」という意味で、絵文字や拡張漢字など、あらゆる文字を正しく格納できる照合順序なのだとか。

MySQLのutf8は3バイト

そもそも、MySQLが扱う「utf8」は最大3バイトの文字しか格納できない。しかし、実際のUTF-8は4バイトを使う文字もあり、例えば絵文字やU+10000以上の拡張文字、レアな漢字などは保存できません。

そこで、4バイト文字を格納できるようにするには、utf8mb4を選ぶ必要があります。

テーブルやカラムをutf8mb4に変更

すでにutf8になってしまっているテーブルを、utf8mb4に変更するには次のようなSQLで変更できます。

ALTER TABLE テーブル名
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

PHPでの接続文字コードを設定する

PHPのプログラム側で、接続時にutf8mb4を指定するにはDSNを次のように設定します。

$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';

こうして、utf8mb4を使うことができるようになります。

Discussion