2012年6月3日日曜日

OpenShiftのMySQLにUTF-8設定を追加する

OpenShiftのアプリケーションにMySQLカートリッジを追加し、
アプリケーションからMySQLに接続後、
日本語などマルチバイトコードの送受信をすると、
キャラクタが全部「???」になってしまう。

これはMySQL設定(my.cnf)に、UTF-8設定が無いので発生する。

以下に、この現象の対応方法を記録する。
  1. SSHでアプリケーションサーバへログインする
  2. my.cnfのディレクトリ(~/mysql-5.1/etc/)までcdする
  3. my.cnfファイルをviで開く
  4. 下記設定を追加する
    [mysqld]
    ..
    .....
    .....
    default-character-set=utf8
    character-set-server=utf8
  5. 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 件のコメント:

コメントを投稿