【MySQL】日本語をinsertするとエラーになる
表題通りでinsertするデータに日本語が入っていた場合下記のようにエラーがでて登録できませんでした。なんか忘れる度に出くわすのでメモとして残します。
ERROR xxxxxx: Incorrect string value: '\x8D\xE2\x96{\x97\xB4...' for column
結論としてはデフォルトの文字コードが「latin1」になっているのが悪いので
UTF-8に変更してあげればいいのですが
すでにデータベースを作ってしまった場合は、作り直した方が早いかも(;^_^A
データベースとテーブル毎に文字コードがあるので注意が必要です。
文字コードを調べるコマンドは下記になります。
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show global variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
上記はすでに設定した状態ですが、文字コード修正するには/etc/my.cnfは下記を修正します。
変更後にmysqlを再起動して完了です。