Top > テクノロジー > プログラミング

MySQLで絵文字対策のためにutf8mb4を使う






utf8のMySQLでデータを格納している際に絵文字だと思われた場所から先が格納されず「あれ〜?」ってなったことはありませんか?

実はこれはutf8が絵文字に対応していないからなんです。
そんなMySQLでutf8mb4という文字エンコードを適用して絵文字対策をするまでを紹介します。

本ページに掲載のリンク及びバナーには広告(PR)が含まれています。


皆さん、iPhoneやAndroidの絵文字を使いますか?

僕は結構使います。そんなiPhoneやAndroidの絵文字ですが、実はMySQLで扱うためには一工夫が必要なのです。

今現在、MySQLは文字エンコードをutf8として運用されていることが多いように見受けられます。

日本語やマレー語にも対応してくれたutf8ならば絵文字も扱えるはずだ!と信じたいものですが、実は残念ながらiPhoneやAndroidの絵文字にはutf8は対応していません。

そんな絵文字に対応する方法を本記事では紹介します。

 

iPhoneやAndroidの絵文字に対応する文字エンコードはutf8mb4

 

なんでutf8は絵文字に対応してないのでしょうか?

これは、絵文字はマルチバイト文字の中でも4バイトの領域が必要な文字だからになります。

MySQLのutf8は、1~3バイトの文字しか格納できないので、絵文字が格納できないということになります。

実は、日本語の難しい漢字や一部中国語も4バイトが必要な漢字があるものがあります。

 

ということは、絵文字が多用される今、MySQLの文字コードはutf8mb4じゃないと正直現実的ではありません。

つまり、MySQLの運用にはutf8mb4が必要なことが多くなることが予想されます。

 

utf8mb4の適用

 

my.cnfに以下の記載を追加します。

 

innodb_large_prefix = ON 

innodb_file_format = Barracuda
innodb_file_format_max = Barracuda

 

innodb_large_prefixは、サイズの大きいカラムを許容する設定です。

utf8mb4は、4バイトの確保が必要なので、VARCHAR(255) のカラムを定義した際には、MySQLのデフォルトのサイズ制限を超えてしまいます。

また、innodb_large_prefixを適用するには、innodb_file_formatをBarracudaにする必要があり、テーブル作成時はROW_FORMATをDYNAMICにする必要があるのでお気をつけください。

 

上記の設定した上でMySQLのシステム変数のcharacter系統の変数をutf8mb4に変更する必要があります。

 

mysql> show variables like '%character%';
+--------------------------+-----------------------------------------------------+
| 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       | /usr/local/Cellar/mysql/5.7.9/share/mysql/charsets/ |
+--------------------------+-----------------------------------------------------+

 

これで、新規で作成されるテーブルは全てutf8mb4になります。

 

既存のテーブルがutf8になってしまっている場合

 

あります。。。ありますよね!

あとで気付いたパターン。(僕もそうでした

DBの問題ってめんどくさいですよね・・・・!

 

とまぁ愚痴はここまでにして、あとからutf8mb4を設定する場合はどうするかというところを説明します。

前述の設定を全て設定し終わった後と仮定してお話しますね。

 

utf8mb4への変換方法は非常にシンプルで、やることは3点だけです。

  1. 既存のDBの文字コードをutf8mb4に変換
  2. 既存テーブルのROW_FORMATをDYNAMICに変換
  3. 既存テーブルの文字コードをutf8mb4に変換
ALTER DATABASE  CHARACTER SET utf8mb4; # DBのutf8化
ALTER TABLE  ROW_FORMAT=DYNAMIC; #ROW_FORMATの変換
ALTER TABLE  CONVERT TO CHARACTER SET utf8mb4; #テーブルのutf8mb化

以上で終了です。簡単でしょう?

-> 参考( MySQL utf8からutf8mb4への変換 - Qiita )

 

さあ!これであなたの絵文字格納ライフも順風満帆ですよ!


フォローして最新の情報をチェック!





おすすめ記事



人気記事ランキング



最新のお知らせ

2020年08月18日 FULL HOUSE運営メディアに「Google Map」の情報が追加されました
2020年06月05日 FULL HOUSE運営メディアに「キーワード検索」が実装されました
2020年04月16日 グルメメディア「はらへり」、"テイクアウトや宅配が利用できるお店の特集"と"コロナに苦しむ飲食店の応援キャンペーン"を開始
2020年02月03日 【祝】株式会社FULL HOUSEはお洒落なリノベ一軒家にオフィスを移転しました!
2019年11月13日 株式会社FULL HOUSE、飲食費を支給する「グルメ手当」と美容費を支給する「コスメ手当」を導入

タグ一覧

ランキング(37)
転職(79)
面接(49)
就活準備(115)
人事/採用(78)
スマホアプリ(56)
iPhoneアプリ(56)
Androidアプリ(56)
出会い系/婚活/マッチング(39)
恋愛/デート(37)
ゲーム(13)
アニメ(11)
洋楽(4)
映画(7)