Amazon RDS 文字化けと格闘

※2010年の内容なので既にAWS側で対処されているかもしれませんし、別のノウハウがあるかもしれません。

早速、公開され手間もないAmazon RDS を使ってみました。色々な方の記事を参考に構築。

データベースを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/ |
+--------------------------+-------------------------------------------------+

これで、再度データをインポートすると、、、文字化けが解消しました。

スポンサーリンク

シェアする