2018.09.29
Amazon RDSで管理しているMySQL 5.6のデータベースの文字コードをutf8
からutf8mb4
に変更する。データベースを新規作成するのではなく、既に稼働しているデータベースの設定を変更する。
mysql> show variables like "chara%";
+--------------------------+-------------------------------------------+
| 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.6.39.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.00 sec)
パラメータ名 | 意味 | 変更前 | 変更後 | 備考 |
---|---|---|---|---|
charactersetclient | (値なし) | utf8mb4 | ||
charactersetconnection | (値なし) | utf8mb4 | ||
charactersetdatabase | (値なし) | utf8mb4 | ||
charactersetresults | (値なし) | utf8mb4 | ||
charactersetserver | (値なし) | utf8mb4 | ||
innodblargeprefix | (値なし) | 1 | ||
innodbfileformat | (値なし) | Barracuda | ||
innodbfileper_table | 1 | 1 | 「1」にする必要があるが、作成時に既に「1」だった | |
skip-character-set-client-handshake | (値なし) | 1 |
-- テーブルの文字エンコーディングをutf8mb4に変更
mysql> ALTER DATABASE データベース名 CHARACTER SET utf8mb4;
-- テーブルのファイルフォーマットをDYNAMICに変更
mysql> ALTER TABLE テーブル名 ROW_FORMAT=DYNAMIC;
-- テーブルの文字エンコーディングをutf8mb4に変換
mysql> ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4;
mysql> show variables like "chara%";
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /rdsdbbin/mysql-5.6.39.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.00 sec)
無事変更できた。
Ruby on Rails 5でutf8mb4を使うためには、
config/database.yml
を修正するdb/schema.rb
を更新するという作業が別途必要になる。詳しくは以下の記事からどうぞ。
クラウド環境なので、わざわざ稼働中のデータベースを操作しなくても、スナップショットを活用して以下の流れでやる方が好ましいだろう。
データベースサーバーを切り替える際のダウンタイムはほぼゼロにできるが、スナップショットを取ってからデータベースの切り替えを行うまでの間のデータは破棄されることになってしまうため、結局はメンテナンス時間を作る必要がある。