問題点
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文字列を入れる
- MySQL に iOS の絵文字(4bytes UTF-8)が入った文字列を INSERT/UPDATE すると絵文字以降の文字がぶった切られる件
- mysql に 4バイトutf8 の文字を入れたい
- UTF-8 エンコードされた絵文字を MySQL / JDBC で取り扱うには?
- UTF-8で4バイトになる文字
JDBCドライバ(Connector/J)でutf8mb4
- MySQL Bugs: #54175: Connector/J cannot handle supplemental characters supported by utf8mb4
- JavaプログラムからMySQLに4バイトのUTF-8文字を放り込んでみる
- UTF-8 エンコードされた絵文字を MySQL / JDBC で取り扱うには?
- Error in running Java Code code ( Unknown character set: 'utf8mb4' )?