MySQL を UTF-8 で使おうと思ってハマりがちなのは charset utf8 を指定してしまうことです。
MySQL の UTF-8 には歴史的事情により utf8 と utf8mb4 の二つあります。
UTF-8 は1バイト〜4バイトで1文字が構成される文字コードですが、MySQL の utf8 は4バイト文字を扱うことができません。ハマりたくなければ utf8mb4 を使いましょう。
utf8 を使ってしまった場合に4バイト文字がどのように扱われるか、自分でもうろ覚えだったのでメモしておきます。
登録
接続が utf8mb4 でカラムが utf8mb4
あたりまえですが、そのまま登録されます。
mysql> insert into utf8mb4 (c) values ('美味しい🍣と🍺');
mysql> select * from utf8mb4;
+-------------------------+
| c |
+-------------------------+
| 美味しい🍣と🍺 …[さらに読む]