※2010年の内容なので既にAWS側で対処されているかもしれませんし、別のノウハウがあるかもしれません。
早速、公開され手間もないAmazon RDS を使ってみました。色々な方の記事を参考に構築。
- Amazon RDSメモ
- Amazon RDSではタイムゾーン設定を直せないので毎回SET time_zoneを呼ぶ必要あり
- Amazon Web Services Developer Community : Configuring for UTF-8
データベースをUTF8で作成したかったのですが、上記の「Configuring for UTF-8」の記事の紹介だけでは、文字化けが解消しませんでした。メモを残しておきます。
まず、MySQLの設定グループを新設する。
$rds-create-db-parameter-group utf8 --description "UTF8 for MySQL5.1" --engine "MySQL5.1"
UTF8を扱う設定にする。
$rds-modify-db-parameter-group utf8 --parameters="name=character_set_server, value=utf8,method=immediate" --parameters="name=collation_server,value=utf8_general_ci, method=immediate"
データベースを作成する。
$rds-create-db-instance --db-instance-identifier mydb --allocated-storage 10 --db-instance-class db.m1.small --engine MySQL5.1 --master-username myuser --master-user-password mypassword --db-name mydb --db-parameter-group-name utf8
確認してみる。
$ mysql --host=myhost --port=myport --user=myusername --password --default-character-set=utf8 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 | /rdsdbbin/mysql-5.1.38.R1/share/mysql/charsets/ | +--------------------------+-------------------------------------------------+ 8 rows in set (0.07 sec)
良さそうだったので、このまま Ruby on Rails の適当なコードで DB migrate。日本語を UTF8 で INSERT してみると、、、 ??? の文字化け。
もう一度確認してみる。実際に利用するデータベースの設定を見てみると。。。
$mysql --host=myhost --port=myport --user=myusername --password --default-character-set=utf8 mysql> use mydb mysql> show variables like '%character%'; +--------------------------+-------------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/mysql-5.1.38.R1/share/mysql/charsets/ | +--------------------------+-------------------------------------------------+
こんな状態になっている。どうやら、rds-create-db-instance で db-parameter-group-name を利用しても、データベース生成時に反映されていない模様。
しかたがないので、以下のように設定。
mysql>alter database mydb default character set utf8; 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 | /rdsdbbin/mysql-5.1.38.R1/share/mysql/charsets/ | +--------------------------+-------------------------------------------------+
これで、再度データをインポートすると、、、文字化けが解消しました。