MySQL解決插入emoji表情失敗的問題


  •  普通的字符串或者表情都是占位3個字節,所以utf8足夠用了,但是移動端的表情符號占位是4個字節,普通的utf8就不夠用了,為了應對無線互聯網的機遇和挑戰、避免 emoji 表情符號帶來的問題、涉及無線相關的 MySQL 數據庫建議都提前采用 utf8mb4 字符集,這必須要作為移動互聯網行業的一個技術選型的要點
  • Mysql 版本的限制,Mysql 5.5.3之前的版本,支持的utf8為3字節的,Mysql 5.5.3之后的版本支持utf8mb4
    • 修改mysql的配置文件,windows下的為my.ini(linux下的為my.cnf),修改的內容都一樣
    復制代碼
    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    復制代碼
    • 將數據庫中對應的字段,改為utf8mb4_general_ci

所以就只能用代碼解決了, 一開始是准備從JDBC連接時候就指定使用的字符集處下手.

jdbc:mysql://localhost:3306/ding?characterEncoding=UTF-8 

主要把UTF-8修改為utf8mb4對於的Java Style Charset字符串應該就能解決問題吧?不過很遺憾的是, Java JDBC並不存在utf8mb4對於的字符集. 使用UTF-8的時候可以兼容urf8mb4並自動轉換字符集.

For example, to use 4-byte UTF-8 character sets with Connector/J, configure the MySQL server with character_set_server=utf8mb4, and leave characterEncoding out of the Connector/J connection string. Connector/J will then autodetect the UTF-8 setting. — [MySQL:Using Character Sets and Unicode][3]

后來科普了一下, 在每一次查詢請求的時候, 可以顯式的指定使用的字符集, 使用 set names utf8mb4 可以指定本次鏈接的字符集為utf8mb4, 但這個設置在每次連接被釋放后都會失效.

目前的解決辦法是, 在需要插入utf8mb4的時候, 顯示地調用執行 set names utf8mb4 , 如:

jdbcTemplate.execute("set names utf8mb4"); jdbcTempalte.execute("...");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM