文字コードを変えよう
Aurora Serverless を作ってみたものの、
latin
という文字コード(character set)が標準で
日本語や🍺を扱えなかったので使えるようにする。
環境(2019/12/19)
- Aurora Serverless
- MySQL
- aurora 5.6
設定方法
パラメータグループを作成
RDS > パラメータグループ
画像はAurora Serverless むけの設定なので注意。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F545251%2F158696ec-083b-3ea4-0bb7-84767a63e82c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5b0e4d26b2bea64ffc64335499fc1525)
パラメータを設定
上部の「パラメータを編集」を押下し、以下のように設定していく
character_set
ただの utf8 だとこういうふうになるので、utf8mb4
を選択。
character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_results = utf8mb4
character_set_server = utf8mb4
index column size の拡張(optional)
utf8mb4 を設定して、 varchar(255)
のキーカラムとか作ると
mysql Index column size too large. The maximum column size is 767 bytes.
と、こういう理由で怒られる。
そんな長いキーカラム作るなよって話もあるんだけど、
そういうの気にせずに typeorm から使いたいのでその制限を拡張する。
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = 1
拡張したindex column sizeを使うために
CREATE文で、 ROW_FORMAT=DYNAMIC
を指定する必要があった。
CREATE TABLE `retweet` (`tweetId` varchar(255) NOT NULL, ...) ENGINE=InnoDB ROW_FORMAT=DYNAMIC
パラメータグループを反映
対象のデータベースの「変更」から、作成したパラメータグループを選択して保存
しばらくすると反映されるはず
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F545251%2Fed487833-7d71-f5a4-534d-d21a16a07ae0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=02c0117467bcdf7f75a84314e69d78c8)
結果の確認
show variables like "character%"
すると見える
なんか utf8mb4 じゃないけどまあ問題なく使えてるから大丈夫なんでしょう。。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F545251%2F64c8bbad-339f-a4b1-cd36-fb10bdc02779.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b81f7a51ebec3b606c6d63673779abae)