ちょっと話題の記事

RDS MySQL5.5.33 で『utf8mb4』(4バイト対応UTF-8文字コードセット)を試してみた

2013.10.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ちょっとした小ネタです。RDS(MySQL)に於いて、『utf8mb4』に対応した環境が作成出来るか/対応しているかという件で確認する機会がありましたので、当エントリに備忘録的として記しておきます。

目次

 

『utf8mb4』とは

この『utf8mb4』というもの、文字コードの一種で、UTF8で4バイト文字を扱う事が出来るものらしいです。

また、それぞれのバージョンで扱う事が出来るCharacter Setの一覧も以下にメモしておきます。

MySQLでは5.5からこのutf8mb4に対応しているようです。

4バイト文字にはどのようなものがあるのでしょうか。以下がそのものズバリな内容を記載しています。

また、以下のエントリではこんな記述も。

  • 鯖管のメモ帳: mysql に 4バイトutf8 の文字を入れたい
  • MySQLの UTF-8 は4バイトに対応していません。 ですが、絵文字や中国漢字、日本語でも特殊漢字などは4バイトが含まれています。

     

    RDS(MySQL)環境の用意

    まずは検証用のRDS(MySQL)インスタンスを作成します。MySQLのバージョンを5.5.x系のものにした以外は特に個別の設定は施していません。

    mysql-utf8mb4_0001

    RDSインスタンスが出来上がったらひとまず現状の環境に接続確認してみましょう。接続に必要なのはホスト名・ユーザー名・パスワード・ポート番号・DB名です。

    mysql-utf8mb4_0002

    接続の際にはクライアントツールの『Sequel Pro』で試してみます。

    mysql-utf8mb4_0003

     

    『utf8mb4』に対応したパラメータグループを作成・適用

    作成時にデフォルト指定されているパラメータグループから今回のケースに対応したパラメータグループに変更・適用させる事で目標をさせて行きたいと思います。まずは管理コンソールからRDSのパラメータグループの項を選択し、作成へ進みます。

    mysql-utf8mb4_0005

    名称等の必要事項を入力し、次へ。ここではバージョンをMySQL5.5で指定しています。

    mysql-utf8mb4_004

    パラメータ情報の更新を行います。冒頭紹介したエントリ群を元に、必要と思しき内容をそれぞれ更新しています。

    mysql-utf8mb4_1002

    mysql-utf8mb4_1004

    パラメータグループが出来たら、RDSインスタンスに紐づくパラメータグループを更新します。該当のRDSインスタンスを選択し、Modifyを選択。

    mysql-utf8mb4_2001

    対象のパラメータグループに置き換え、変更を適用。変更を即座に反映させる為のチェックも指定します。

    mysql-utf8mb4_2002

    mysql-utf8mb4_2003

    mysql-utf8mb4_2004

    Parameter Groupのステータスが『applying』から『pending-reboot』になったら、インスタンスを再起動させます。Instane Actionsから指定出来ます。再起動が完了したら、改めて接続して状況を確認してみましょう。

    mysql-utf8mb4_2005

     

    『utf8mb4』関連パラメータグループ適用後の内容確認

    パラメータグループ適用前と同じく、文字コード情報を確認してみましょう。作成してあるデータベースは一旦削除して確認してみます。『character_set_database』と『character_set_server』の値が変わっていますね。その他の値も変更されている事を期待していたのですが上手く行っていない(?)模様です。CREATE TABLEの際に『CHARACTER SET utf8mb4』のオプションを付けた場合でも同様の結果でした。

    mysql-utf8mb4_3001

    パラメータグループ編集のタイミングでも指定していた『SET NAMES utf8mb4』を実行してみると、期待していた結果が得られました!本来であればパラメータグループ内で完結させたかったのですが、何か指定の方法が悪かったのか...ひとまずは対応する文字コードに変更出来たので次は実際にデータを投入して確認してみます。

    DROP DATABASE cmtestdb;
    CREATE DATABASE cmtestdb CHARACTER SET utf8mb4;
    SET NAMES utf8mb4;
    USE cmtestdb;
    SHOW VARIABLES LIKE 'character%';

    mysql-utf8mb4_3002

    簡易なデータ投入・確認用のテーブルを作成します。

    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文には末尾に顔文字を入れていたのですがスクリーンショット取るタイミングで取り漏れてしまいました...|ω・;))

    mysql-utf8mb4_3003

    本来であれば『SET NAMES utf8mb4』の部分も適用させたかったのですが環境の問題なのか手法の問題なのか、一点上手く行かなかったのは惜しいところでした。当課題については、より効率の良い手法もあるような気がしているので、併せて今後の解決事項かなと言う気がします。調査結果は以上です。