AWS ITかあさん

ITかあさん

AWS RDSのMySQLの文字コードをutf-8に変更

AWS RDSのMySQLの文字コードをutf-8に変更

RDSで立てたMySQLってlatin1なんですね

発生エラー

ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: ‘\xE3\x83\x9E\xE3\x83\xBC…’ for column ‘name’ at row 1: …

最近EC2にRailsアプリケーションをデプロイしてみたんですが、文字コードがlatin1なんですね、デフォルトで。(日本語だとエラー発生するんで何事かと思ったら文字コードがutf-8じゃなかった)

そんなわけで文字コードを変更します。

コマンド

EC2のインスタンスからアクセスする前提でいきます。
mysql -h end-point -P 3306 -u database-user -p database-name


> 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.22.R4/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.01 sec)

デフォルトの文字コードをutf-8にします。

MySQL [database-name]> ALTER DATABASE database-name default character set utf8;
Query OK, 1 row affected (0.01 sec)

すでにテーブルがいくつか登録済であれば、テーブルに対してもutf-8になるように変更してあげる必要があります。
> ALTER TABLE table_name CONVERT TO CHARACTER SET UTF8;