RDS MySQL5.5.33 で『utf8mb4』(4バイト対応UTF-8文字コードセット)を試してみた
ちょっとした小ネタです。RDS(MySQL)に於いて、『utf8mb4』に対応した環境が作成出来るか/対応しているかという件で確認する機会がありましたので、当エントリに備忘録的として記しておきます。
目次
『utf8mb4』とは
この『utf8mb4』というもの、文字コードの一種で、UTF8で4バイト文字を扱う事が出来るものらしいです。
また、それぞれのバージョンで扱う事が出来るCharacter Setの一覧も以下にメモしておきます。
- MySQL :: MySQL 5.1 Reference Manual :: 10.1.13 Character Sets and Collations That MySQL Supports
- MySQL :: MySQL 5.5 Reference Manual :: 10.1.14 Character Sets and Collations That MySQL Supports
- MySQL :: MySQL 5.6 Reference Manual :: 10.1.14 Character Sets and Collations That MySQL Supports
MySQLでは5.5からこのutf8mb4に対応しているようです。
4バイト文字にはどのようなものがあるのでしょうか。以下がそのものズバリな内容を記載しています。
また、以下のエントリではこんな記述も。
- 鯖管のメモ帳: mysql に 4バイトutf8 の文字を入れたい
MySQLの UTF-8 は4バイトに対応していません。 ですが、絵文字や中国漢字、日本語でも特殊漢字などは4バイトが含まれています。
RDS(MySQL)環境の用意
まずは検証用のRDS(MySQL)インスタンスを作成します。MySQLのバージョンを5.5.x系のものにした以外は特に個別の設定は施していません。
RDSインスタンスが出来上がったらひとまず現状の環境に接続確認してみましょう。接続に必要なのはホスト名・ユーザー名・パスワード・ポート番号・DB名です。
接続の際にはクライアントツールの『Sequel Pro』で試してみます。
『utf8mb4』に対応したパラメータグループを作成・適用
作成時にデフォルト指定されているパラメータグループから今回のケースに対応したパラメータグループに変更・適用させる事で目標をさせて行きたいと思います。まずは管理コンソールからRDSのパラメータグループの項を選択し、作成へ進みます。
名称等の必要事項を入力し、次へ。ここではバージョンをMySQL5.5で指定しています。
パラメータ情報の更新を行います。冒頭紹介したエントリ群を元に、必要と思しき内容をそれぞれ更新しています。
パラメータグループが出来たら、RDSインスタンスに紐づくパラメータグループを更新します。該当のRDSインスタンスを選択し、Modifyを選択。
対象のパラメータグループに置き換え、変更を適用。変更を即座に反映させる為のチェックも指定します。
Parameter Groupのステータスが『applying』から『pending-reboot』になったら、インスタンスを再起動させます。Instane Actionsから指定出来ます。再起動が完了したら、改めて接続して状況を確認してみましょう。
『utf8mb4』関連パラメータグループ適用後の内容確認
パラメータグループ適用前と同じく、文字コード情報を確認してみましょう。作成してあるデータベースは一旦削除して確認してみます。『character_set_database』と『character_set_server』の値が変わっていますね。その他の値も変更されている事を期待していたのですが上手く行っていない(?)模様です。CREATE TABLEの際に『CHARACTER SET utf8mb4』のオプションを付けた場合でも同様の結果でした。
パラメータグループ編集のタイミングでも指定していた『SET NAMES utf8mb4』を実行してみると、期待していた結果が得られました!本来であればパラメータグループ内で完結させたかったのですが、何か指定の方法が悪かったのか...ひとまずは対応する文字コードに変更出来たので次は実際にデータを投入して確認してみます。
DROP DATABASE cmtestdb; CREATE DATABASE cmtestdb CHARACTER SET utf8mb4; SET NAMES utf8mb4; USE cmtestdb; SHOW VARIABLES LIKE 'character%';
簡易なデータ投入・確認用のテーブルを作成します。
CREATE TABLE user_master ( user_id INT(10) NOT NULL, user_name VARCHAR(100), user_memo VARCHAR(300), PRIMARY KEY (user_id) ) character set utf8mb4;
そしてデータ投入。計5件投入してみました。1件目は『じょう』の字が4バイト文字、2件目以降は絵文字が入っている形となっています。(追記:5件目のINSERT文には末尾に顔文字を入れていたのですがスクリーンショット取るタイミングで取り漏れてしまいました...|ω・;))
本来であれば『SET NAMES utf8mb4』の部分も適用させたかったのですが環境の問題なのか手法の問題なのか、一点上手く行かなかったのは惜しいところでした。当課題については、より効率の良い手法もあるような気がしているので、併せて今後の解決事項かなと言う気がします。調査結果は以上です。