零細システムエンジニアの備忘録

RPA、サーバ、ネットワークに関する設定メモ、導入相談もコメント欄やメールに頂ければお答えしますのでお気軽にご相談下さい(^^)

【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は下記を修正します。


[mysqld]

character-set-server=utf8   ⇒ 追記

 

[mysql]      ⇒ 追記
default-character-set=utf8 ⇒ 追記

変更後にmysqlを再起動して完了です。