AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす
- (1) Django起動まで
- (2) (TIPS) SSH、RDSへの接続
- (3) (TIPS) ログの確認とデプロイ結果の確認
- (4) いくつかのトラブルシュート
- (5) アプリケーションの作成
- (6) createadmin スクリプトの実行のトラブルシュート
- (7) 静的IPアドレスの設定とドメインの取得とDNSの設定
- AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす
- Djangoでバッチ処理を行う(AWS Elasticbeanstalk)
Elastic Beanstalk を使って、Django アプリケーションを構築しようとしているのだが、RDS の設定(AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(2) (TIPS) SSH、RDSへの接続) がデフォルトの文字コードがラテンになっていて、いざRDSにデータを投入しようとすると、以下のような”string value”エラーが発生してしまう。
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 となっているのが確認できる。
3.2 RDSの設定 パラメータグループの作成
いつの間にか日本語になってて嬉しいAWSのRDSダッシュボードから、パラメータグループの作成を行う。
パラメータグループファミリーに対象のMySQLのバージョンを設定し、作成
3.3 パラメータグループの設定変更
先ほど確認した、charcter_set_database および charcter_set_server をフィルタに入力し、
それぞれ、utf-8 に設定を変更する。
インスタンスの変更メニューを起動し、
パラメータグループを、今作成したものに変更し、
RDSインスタンスの再起動
3.4 RDS データベース設定の確認
再度、MySQL Workbench で接続し、設定が変更されていることを確認。
うまいこといきました。めでたしめでたし。
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