Categories: MySQL

MySQL Incorrect string value: の解決策

MySQL である文字をInsertしようとしてエラーが発生。

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に変更します。

 ALTER TABLE member CONVERT TO CHARACTER SET utf8mb4;

面倒ですけど、テーブル1つずつ変更しました。
一括して変更する方法もあるみたいですけど、変換に失敗することもあるので、確認しながらの方がいいと思います。

これで、Incorrect string value エラーは出なくなりました。

ちなみに、utf8mb4は、MySQL 5.5.3以降でなければ使えないらしいので、これより古いバージョンのMySQLを使っているのであれば、MySQL自身のバージョンアップが必要ってことになりますね。。。

nakaike

Share
Published by
nakaike