LoginSignup
64
54

More than 5 years have passed since last update.

RDSに作成したMySqlのDatabaseに日本語が登録出来ない問題

Posted at

問題

AWSのRDSにMySQLのインスタンスを作成し、RailsからDBを作成した際に、日本語が文字化けしていた。

RDSは下記の手順で作成していた

  1. インスタンスの作成
  2. パラメータグループの作成し、下記の項目にutf8を選択
    • character_set_client
    • character_set_connection
    • character_set_database
    • character_set_results
    • character_set_results
  3. 作成したインスタンスのパラメータグループを2.で作成したパラメータグループに変更
  4. インスタンスの再起動 これで日本語対応完了と思っていた。

実際にRailsのアプリからデータを投入すると、投入したデータの日本語が文字化けしている。

EC2にSSHで接続し、EC2からRDSにmysqlCommandでアクセスしてDBの状態を確認する。

mysql -h エンドポイント -P Port -u ユーザ名 -p データベース名

アクセス出来たらshow variables like 'char%';で確認

mysql> show variables like 'char%';
+--------------------------+-------------------------------------------+
| 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     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.7.11.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.01 sec)

mysql>

character_set_databaseがlatin1になっている!?

インスタンスを作成する際に読み込んだパラメータグループがデフォルトであったため、再起動しても、databaseの文字コードは新しい設定になっていない模様。。。

解決策

下記のコマンドを実行してdatabaseの文字コードを修正

mysql> ALTER DATABASE データベース名 default character set utf8;
Query OK, 1 row affected (0.01 sec)

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     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.7.11.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.01 sec)

mysql>

すでにテーブルも作成している場合、テーブルの文字コードも変更する必要がある
ALTER TABLE テーブル名 CONVERT TO CHARACTER SET UTF8

RDSのインスタンス作成時に対応する

なお、インスタンスを作成する前にパラメータグループを作成し、utf8の設定と一緒にskip-character-set-client-handshake1を設定する。
その後、インスタンスの作成時、パラメータグループに作成したパラメータグループを選択するようにすると、
インスタンス作成時に、character_set_databaseがutf8で作成される。

次回設定するときは、先にパラメータグループを作成してからインスタンスを作成しよう。。。

64
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
54