mysqlでERROR 1366 (HY000): Incorrect string value

2008-06-01 00:03:27 | mysql
mysqlでERROR 1366 (HY000): Incorrect string value
が発生。

原因は、
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_set_clientでutf-8を指定しているのに、shift_jisで
insert使用としたから、

mysql> set character_set_client = sjis;
mysql> set character_set_results = sjis;

で、character_set_clientとcharacter_set_resultsをshift_jisにすれば、OK。


取り消し線よりも、my.iniの[mysql]セクションを
[mysql]
#default-character-set=utf8
default-character-set=sjis
上記のように変更したほうがよい。(取り消し線だと、まいど設定し直しになる。)
こうすることで、
character_set_client、character_set_connection、character_set_resultsがShiftJISに変わる。
理屈は以下、
character_set_client
クライアントから渡された SQL 文はこの文字コードであると解釈される。

character_set_connection
キャラクタセットイントロデューサ (例えば『_ujis'ほげ'』)が省略された
SQL 文中の文字列リテラルはこの文字コードであると解釈される。

character_set_results
サーバーがクライアントに返す結果をこの文字コードに変換する。
この変数を NULL にセットすると、結果に対する文字コード変換をしないよ
うにできる。
そのまんま