Help us understand the problem. What is going on with this article?

RDSで日本語が文字化けする問題

More than 5 years have passed since last update.

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に変えてあげるとよい

reoy
swiftとobjcをメインで使っています。最近はもはやswiftが殆ど。Ruby on Railsも頑張ってます!
recruitmp
結婚・カーライフ・進学の情報サイトや『スタディサプリ』などの学びを支援するサービスなど、ライフイベント領域に関わるサービスを提供するリクルートグループの中核企業
http://www.recruit-mp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away