MySQL である文字をInsertしようとしてエラーが発生。
1 |
Incorrect string value: '\xF0\xA6\x9A\xB0\xE7\x94...' for column 'name' at row 1 |
調べてみると、どうやら「サロゲートペア」である文字をInsertしようとしたからみたいでした。
結論からいうと、MySQL側のcharacter_set_serverをutf8mb4にすればいいようです。
my.iniの編集
my.iniの[mysqld]セクションにある
character_set_server=utf8
を、
character_set_server=utf8mb4
に変更します。(なければ追加)
変更できたらMySQLを再起動。
MySQLの再起動は、タスクマネージャーのサービスタブをクリックして、MySQLを探して右クリック→再起動(R) でできます。
テーブルのキャラクターセットの変更
さらに、すでにあるテーブルのキャラクターセットを変更します。
次の例は、memberというテーブル名のキャラクターセットをutf8mb4に変更します。
1 |
ALTER TABLE member CONVERT TO CHARACTER SET utf8mb4; |
面倒ですけど、テーブル1つずつ変更しました。
一括して変更する方法もあるみたいですけど、変換に失敗することもあるので、確認しながらの方がいいと思います。
これで、Incorrect string value エラーは出なくなりました。
ちなみに、utf8mb4は、MySQL 5.5.3以降でなければ使えないらしいので、これより古いバージョンのMySQLを使っているのであれば、MySQL自身のバージョンアップが必要ってことになりますね。。。