Java
MySQL

MySQLでの絵文字(4byte文字)対応(utf8)めもめも

More than 5 years have passed since last update.

問題点

MySQL5.5以前では4byteのutf8文字列を入れることができない
⇒日本での絵文字などはこれにあたる。
⇒他の国の言語も一部ここにあたる

現象

実際に入れてみると、4byte文字を境に後ろの文字列が全て消えてしまう。すっぱりと・・・!
あい[絵文字]うえお->あい
abc[絵文字]def->abc
どんなに長い文字列も絵文字の部分から後ろが全部切れてしまうorz

CHARCODE設定

CHARCODE設定をutf-8からutf8mb4に変更

skip-character-set-client-handshake設定

skip-character-set-client-handshakeを入れるといいよ!という記事があるものの、利用環境によるかもしれない。
SQLインジェクションの脆弱性がある。
利用している環境にあわせてskip-character-set-client-handshakeを使うか、skip-character-set-client-handshakeは使わずに対応していくのがよさそう

JDBCドライバ(Connector/J)の対応

Connector/Jのバージョン5.1.12より前のバージョンでは???に文字化けしていまう問題がある
⇒バージョンを5.1.12より新しいものにする
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT)のエラーが出る。
⇒connectionCollationの設定をする
characterEncoding=UTF-8
connectionCollation=utf8mb4_general_ci


参考

MySQLで4byteのutf8文字列を入れる

JDBCドライバ(Connector/J)でutf8mb4

skip-character-set-client-handshakeパラメータについて