讓Mysql支持Emoji表情

RQFHayden 9年前發布 | 9K 次閱讀 MySQL 數據庫服務器

來自: http://blog.csdn.net/likendsl/article/details/7530979


最近在做一個iPhone上的項目,我負責后端,Java開發,DB用的是Mysql,版本5.5.21,編碼用的是UTF-8。

但發現了一個問題,iPhone上有Emoji表情,插入Mysql時失敗了,報如下異常:

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1  
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)  
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)  
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)  
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)  
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)  
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)  
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)  
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)  
 
</div>

 上百度Google一下,終于找到了答案。UTF-8編碼有可能是兩個、三個、四個字節。Emoji表情是4個字節,而Mysql的utf8編碼最多3個字節,所以數據插不進去。解決方案就是:將Mysql的編碼從utf8轉換成utf8mb4。網上應該能搜到一大堆修改Mysql編碼的方法。

 

我是這么做的,可能有些修改沒有必要,但最終我還是解決了問題:

1. 修改my.cnf

[mysqld]

character-set-server=utf8mb4

[mysql]

default-character-set=utf8mb4

修改后重啟Mysql

 

2. 以root身份登錄Mysql,修改環境變量,將character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server 都修改成utf8mb4

 

3. 將已經建好的表也轉換成utf8mb4

命令:alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (將TABLE_NAME替換成你的表名)

 

至此,OK了!


 本文由用戶 RQFHayden 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!