MySQL 5.5.3 以降では、文字コードを「utf8」ではなく「utf8mb4」と指定することで、UTF-8 の4バイト文字に対応できる。
MySQLの5.5.3というバージョンではようやく4バイトのUTF-8への対応が図られたようです。5.5.3の変更点を記したページに記されています。
これを使えば、魚の名前の𩸽(ほっけ、U+29E3D)だとか、偏旁の𧾷(足偏、U+27FB7)だとか、あるいは日本の地名として𣖔木作(ほうのきざく、福島県)の「𣖔」(U+23594)や𣗄代(たらのきだい、山形県)の「𣗄」(U+235C4)などといった、JIS X 0213に含まれる漢字がようやく扱えるようになります。一部の人が希望しているであろうIVSや(今後のバージョンのUnicodeに入る予定の)携帯絵文字に対応するにも4バイトのUTF-8は必要です。
ただし、文字コードの指定として、従来の "utf8" とは別に、"utf8mb4" という名前を持つ別の文字コードとして定義されているようなので注意が必要です。
MySQLの"UTF-8"にご用心 - yanok.net
某環境での作業の記録、44ツイート。
⇒ nilog: 2015-02-27
想定外だったこと。
- TEXT 型カラムの文字コードを utf8mb4 に変更したら MEDIUMTEXT 型に変わってしまった
- インデックスの制限「Specified key was too long; max key length is 767 bytes」にひっかかった
- データがたくさん入っているテーブルで「alter table <table name> default character set utf8mb4;」がぜんぜん終わってくれなかった
思ったより手間がかかった。。
-
資料まとめ。
- MySQL :: MySQL 5.5 Reference Manual :: 10.1.10.6 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)
- MySQLの"UTF-8"にご用心 - yanok.net
- MySQLに絵文字を格納するにはutf8mb4を使う必要があった - F.Ko-Jiの「一秒後は未来」
- MySQL :: Download Connector/J
- blog.k11i.biz: UTF-8 エンコードされた絵文字を MySQL / JDBC で取り扱うには?
- JavaプログラムからMySQLに4バイトのUTF-8文字を放り込んでみる - HHeLiBeXの日記 正道編
- MySQLのテキスト型 | Koumei Soft 開発ログ
- BLOB型とTEXT型 - MySQLのデータ型 - MySQLの使い方
- MySQL(InnoDB) で "Index column size too large. The maximum column size is 767 bytes." いわれるときの対策 - かみぽわーる
- MySQLのPK・UNIQUEのフィールド長制限に立ち向かう - 文系プログラマによるTIPSブログ
- 長い文字列が格納されるカラムに対してINDEXを張る場合には、プリフィックス長を指定してみる - Enjoy*Study
- MySQLで実行中のSQLをキャンセルする | dTblog
tags: mysql java unicode
Posted by NI-Lab. (@nilab)