kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

文字コード「utf8mb4」ってのがあるのを最近知った

MySQLで「utf8mb4」という文字コードがあることを最近知りました。

知った経緯はあるアプリの環境を構築していた時に、設定ができなくて原因をしらべていたら対応できない文字コードとして設定されていました。

Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

MySQLでutf8mb4が対応しているのは、5.3移行ということで現在5.1だったためアップデート作業が必要になりました。

MySqlのアップデート

アップデートに関してはここを参考にさせてもらいました。

blog.ybbo.net

ほぼそのままのコマンドでアップデートできました。

ただ文字コードのエラーについてはまだ出る状態でした。

文字コードの対応表の定義

/usr/share/mysql/charsets配下

このディレクトリ配下にMySqlにおける文字コードの関連付け、設定があるみたいです。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.3 文字セットの追加

ちなみに公式ドキュメントで文字セットの追加部分を読むと確かにIndex.xmlで追加すれば追加できる感じでした。

エラーの内容的に「utf8mb4」の定義追加ができれば問題なさそうです。

が、実際に設定するとなるとなにをかけばいいのか大体はわかるのですが、こまかいところまでは。 binファイルの定義ってなにを指せばいいのかとか。

検索、検索っと。。。やっぱりあるもんですね。便利な世の中だ。

KB Odin: Backup creation via Backup Manager fails: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/

    <charset name="utf8mb4">
      <family>Unicode</family>
      <description>UTF-8 Unicode</description>
      <alias>utf-8</alias>
      <collation name="utf8_general_ci"     id="33">
       <flag>primary</flag>
       <flag>compiled</flag>
      </collation>
      <collation name="utf8_bin"            id="83">
        <flag>binary</flag>
        <flag>compiled</flag>
      </collation>
    </charset>

これをコピーして貼り付けたら実行できるようになりました。

というかIDとかに意味があったら動かないかもしれないけど、いまはとりあえず動いているので、この設定にします。

「utf8mb4」ってなにものですか?

ぱっとしらべてもあまり資料がない。かなり特殊な文字コードなんだろうか。と調べているとMySqlでの特有の文字コードっぽいです。

UTF-8 - Wikipedia

ちなみにどういう文字が使用できないかというのは、具体的な記事があったので記載。

hhelibex.hatenablog.jp

qiita.com

場合によりますが、utf8mb4にしておくのが無難??ですかね。

とりあえず解決したので、個人的には満足です。