AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす

Elastic Beanstalk を使って、Django アプリケーションを構築しようとしているのだが、RDS の設定(AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(2) (TIPS) SSH、RDSへの接続) がデフォルトの文字コードがラテンになっていて、いざRDSにデータを投入しようとすると、以下のような”string value”エラーが発生してしまう。

http://stackoverflow.com/questions/2108824/mysql-incorrect-string-value-error-when-save-unicode-string-in-django

Incorrect string value: '\xC4\x8Dius' for column 'last_name' at row 104

確かに、いつもMySQLのデータベースを作成するときには、文字コードを指定するが、Elastic Beanstalkでは、別段設定箇所がないまま、インスタンスが作成されてしまう。

Elastic Beanstalk の再作成から、RDSの構築までをやり直す。

2.Elastic Beanstalk再作成

まずは、Elastic Beanstalk の再作成。アプリケーションのデプロイまでせずに、環境構築でとどめる。

2.1 Elastic Beanstalk の削除

> eb delete
If you delete your application, your RDS DB Instance will be deleted and you will lose your data.
Delete application? [y/n]:y

2.2 Elastic Beanstalkの作成

> eb init

2.3 Elastic Beanstalk の開始

ここで、アプリケーションのデプロイするか聞かれるが、勇気を出して、NO

> eb start
Starting application "phraseit".
Would you like to deploy the latest Git commit to your environment? [y/n]: n

3.RDSの設定変更

ここまでで、RDSが作成され、インスタンスが起動している。

3.1 RDS データベースの設定確認

MySQL Workbench で RDSに接続(外部クライアントからの接続方法はこちら)し、

show variables like 'char%';

で設定を確認すると、Elastic beanstalk のデフォルトでRDSが作成されるのに任せると、

charcter_set_database および charcter_set_server が latin1 となっているのが確認できる。

aws_rds_charctarset00_01

3.2 RDSの設定 パラメータグループの作成

いつの間にか日本語になってて嬉しいAWSのRDSダッシュボードから、パラメータグループの作成を行う。

aws_rds_charctarset01

パラメータグループファミリーに対象のMySQLのバージョンを設定し、作成

aws_rds_charctarset02

3.3 パラメータグループの設定変更

先ほど確認した、charcter_set_database および charcter_set_server をフィルタに入力し、

aws_rds_charctarset03

それぞれ、utf-8 に設定を変更する。

aws_rds_charctarset04

aws_rds_charctarset05

インスタンスの変更メニューを起動し、

aws_rds_charctarset06

パラメータグループを、今作成したものに変更し、

aws_rds_charctarset07

RDSインスタンスの再起動

aws_rds_charctarset08

3.4 RDS データベース設定の確認

再度、MySQL Workbench で接続し、設定が変更されていることを確認。

aws_rds_charctarset00_02

うまいこといきました。めでたしめでたし。

4.補足

4.1 MySQL の照合順序

http://qiita.com/Vit-Symty/items/159c27d7d62c78ee9ce7

https://dev.mysql.com/doc/refman/5.0/en/charset-collate.html

4.2 データベース設定を変更

ALTER DATABASE ebdb CHARACTER SET utf8 COLLATE utf8_unicode_ci

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です