emoji編碼需要4位unicode,utf8需要升級到utf8mb4才能支持,jdbc默認(rèn)讀取沒有問題,但是插入數(shù)據(jù)的時(shí)候總是出錯(cuò):
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
1. 確認(rèn)MySQL版本;
MySQL版本需要5.5.3+,之前的版本不支持utf8mb4。
2. 修改表內(nèi)對應(yīng)字段;
表內(nèi)字段需要同事修改成utf8mb4。
3. 修改mysql配置文件my.cnf(windows為my.ini)
問題卡在這里了:Mac OS X上安裝了5.7.11沒有發(fā)現(xiàn)my.cnf。
解決方法是直接找到一份,也可以直接創(chuàng)建一個(gè)空文件,或者復(fù)制默認(rèn)模板,模板位置:
/usr/local/mysql/support-files/my-default.cnf
文件保存到這里:(注意:etc下需要root權(quán)限)
/etc/my.cnf
文件最精簡內(nèi)容如下:
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
至此修改完成。
PS:
1、MySQLWorkbench很有問題。連接數(shù)據(jù)庫后,打開Server菜單下Options File 后依然顯示不能讀取my.cnf。但是執(zhí)行命令:
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
能看到其實(shí)已經(jīng)修改完成了,測試后已經(jīng)能成功插入emoji。
2、通過執(zhí)行命令修改后,雖然顯示修改成功,但是每次斷開數(shù)據(jù)庫連接后再次進(jìn)入發(fā)現(xiàn)設(shè)置內(nèi)容又變回來。
SET character_set_client = utf8mb4;
3、MySQL官網(wǎng)給出多個(gè)my.cnf的位置,目前沒有測試其他位置。
4、jdbc修改前默認(rèn)使用的是latin1,修改后變成utf8mb4,所以url不再需要添加useUnicode和characterEncoding。
參考來源:
· Mac OS X下,MySQL在/etc/下沒有my.cnf(MySQL修改編碼時(shí)發(fā)現(xiàn)的問題)
· mysql/Java服務(wù)端對emoji的支持