アプリケーションからMySQLに接続後、
日本語などマルチバイトコードの送受信をすると、
キャラクタが全部「???」になってしまう。
これはMySQL設定(my.cnf)に、UTF-8設定が無いので発生する。
以下に、この現象の対応方法を記録する。
- SSHでアプリケーションサーバへログインする
- my.cnfのディレクトリ(~/mysql-5.1/etc/)までcdする
- my.cnfファイルをviで開く
- 下記設定を追加する
[mysqld]
..
.....
.....
default-character-set=utf8
character-set-server=utf8
- MySQLをリスタートする(又はアプリケーションをリスタート)
> cd mysql-5.1/
> ./app_mysql_ctl.sh restart
MySQLの文字コードをUTF8に設定したい
20130831 追記
OpenShiftバージョンアップの影響で、my.cnfの編集が不可能になった。
所有者がrootになり、我々一般ユーザには書き込み権限が無い。
#なんとも使い勝手の悪い、迷惑なバージョンアップだわ…。
#こんなに悪い仕様や使い勝手で有料化されても、絶対に買わないわな…。
で、
文字化け対策として別の方法を捜してみた結果、
「JDBCの接続文字列に付与する接続パラメータで解決する」
という方法が見つかったので記録しておく。
通常の接続文字列(jdbc:mysql://…の文字列)にパラメータを付与して下記のように指定する。
(旧)
jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/DB名
(新)
jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/DB名?useUnicode=true&characterEncoding=utf8
これで文字化けを回避する。
20131001 追記
Tomcat7のデータソースとして使う場合は、context.xmlの中で設定する。
その際、指定するURLは下記のようにする必要がある。
jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/DB名?useUnicode=true;characterEncoding=utf8;
0 件のコメント:
コメントを投稿