RDSではDefaultでcharacter-setにlatin1が割り当てられる為、日本語を利用する際はutf8などに変更してあげる必要がある。
##Step1
RDSダッシュボードの左メニューからParameter Groupsを選択する。
Create DB Parameter Groupを選択し、
- DB Parameter Group Family
- DB Parameter Group Name
- DB Parameter Group Description
をそれぞれ選択し、設定を行うDBの種類、パラメータグループの名前と説明を入力し、"Yes, Create"で作成
##Step2
パラメータグループが出来たことを確認したら、作成したグループの詳細ページからEdit Parametersを選択し、
- character_set_client
- character_set_connection
- character_set_database
- character_set_results
- character_set_server
これらを utf8 に設定
ただ、これだけだとデータベースの一部が latin1 から変わらない問題が生じてしまうので
- skip-character-set-client-handshake
のパラメータを1に設定
変更を加えたら"Save Changes"をクリックして変更を保存する
##Step3
まだインスタンスを立ち上げてない場合は"Launch DB Instance"で新規インスタンスを立ち上げ、Parameter Groupに先ほど作成したグループを指定する。
すでにインスタンスが立ち上がっている場合は"modify"を選択して、Parameter Groupを変更してSaveする。
既に立ち上がっているインスタンスのパラメータグループを変更した際は"Configuration Details"の"Parameter Group"が pending-reboot となるので"Instance Actionからreboot"を選択し、インスタンスを再起動する。
その際に数分間インスタンスが止まるのでタイミングを見計らってから行うとよい
##Step4
インスタンスの再起動を行ったらコマンドラインからmysqlに接続してcharsetが変わっているか確認する
% mysql -u ユーザー名 -p -h xxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com データベース名
mysql> show variables like 'char%';
+--------------------------+-------------------------------------------+
| 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.6.17.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
このようにutf8になっていることを確認できたら完了
##追記
既存テーブルのcharsetが
SHOW CREATE TABLE テーブル名
を行った時に
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| テーブル名 | CREATE TABLE `テーブル名` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)
のようにlatin1から変わってない時があるので、DROP TABLEをして作り直すか、
ALTER TABLE テーブル名 CONVERT TO CHARACTER SET UTF8
としてUTF8に変えてあげるとよい