😀
MySQLのutf8mb4は4バイトのUTF-8
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