私の環境の場合は文字コードは全てutf-8で運用していたけれど、jspのフォームからパラメータを送って、サーブレットでsqlのinsert文を実行し、結果が正しく反映されているかどうかmysql command line client から確認してみたところ、日本語の文字列が全て???に化けてしまっていた。jspとサーブレット、mysqlの文字コードは全てutf-8で統一しているにもかかわらず。色々と調べた結果、下記の内容をmysqlのmy.iniファイルに追記することで変化が現れた。
mysql-5.0.20を使いたいのですが、文字化けで困っております。日本語の文字が?になってしまいます。
●my.iniで、追加した項目[client]
default-character-set=sjis
[mysqld]
skip-character-set-client-handshake
init-connect=SET NAMES sjis
これを追記したあとで再起動して、もういちどテストしてみると???のような文字化けではなくて”繝・せ繝・”のような文字化けに変わった。次にmysqlの変数を設定する。
mysql> show variables like 'char%'; +--------------------------+---------------------------------------------------------+ | 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 | C:Program FilesMySQLMySQL Server 5.0sharecharsets | +--------------------------+---------------------------------------------------------+
上記が私の環境でのmysqlの文字コードの設定内容となっている。utf-8に揃えているのだけれど、character_set_resultsの値は接続するクライアントの環境の文字コードに合わせる必要がある。私の場合は、windows xpでmysql command line clientを使ってmysqlに接続している。つまり、コマンドプロンプトでmysqlを操作している。コマンドプロンプトは表示する文字コードがshift-jisに固定となっている。そのため、mysqlの変数のcharacter_set_resultsにsjisを設定しなければならない(コマンドプロンプト以外でアクセスする場合はそのクライアント端末によって変わることになる)
mysql> set character_set_results = sjis;
これで、なんとか文字化けの現象は回避できた。