表情儲存異常--mybatis拋出異常(java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1)

來源:互聯網
上載者:User

標籤:儲存   default   shu   使用   應用   tps   auto   except   tsql   

文章參考 

42171035

https://www.cnblogs.com/WangYunShuaiBaoLe/p/9055215.html

https://www.jb51.net/article/112879.htm

背景

iOS端測試時發現,在備忘一欄輸出emoji表情,儲存時出現系統異常

java項目架構 spring-boot+mybatis+德魯伊串連池

現象

拋出  java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column ‘name‘ at row 1

定位

1、資料庫欄位、表、資料庫、mysql的編碼需要設定成utf8mb4

2、資料庫連接設定編碼

show variables like "%char%";

解決1、設定資料庫  1)修改欄位字元集
ALTER TABLE table_name CHANGE column_name VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2)設定表的字元集   
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  3)設定資料庫的字元集
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
  4)修改資料庫應用字元集
找到linux下的mysql位置$ whereis mysql          找到位置$  vi my.cnf  【這裡有my.ini,如果只有my-default.ini,則複製一份並命名為my.ini】 [增加或修改][client]# 用戶端來來源資料的預設字元集default-character-set = utf8mb4[mysqld]# 服務端預設字元集character-set-server=utf8mb4# 串連層預設字元集collation-server=utf8mb4_unicode_ci[mysql]# 資料庫預設字元集default-character-set = utf8mb4
$ service mysqld restart 重啟服務即可
 2、設定編碼

  在命令列中輸入,但是這個只在當前會話起作用

set character_set_database=utf8;set character_set_server=utf8;
3、修改串連池屬性
<property name="connectionInitSqls">    <list>        <value>set names utf8mb4</value>    </list></property>

並且

jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
特別說明其中的jdbc.url配置:如果你已經升級好了mysql-connector,其中的characterEncoding=utf8可以被自動被識別為utf8mb4(當然也相容原來的utf8),
而autoReconnect配置我強烈建議配上,我之前就是忽略了這個屬性,導致因為緩衝緣故,沒有讀取到DB最新配置,導致一直無法使用utf8mb4字元集,多麼痛的領悟!!

親測可以

 

 

 utf8與utf8mb4說明:  

UTF- 8:Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字元的一種多位元組編碼,它對英文使用8位(即一個位元組),中文使用24為(三個位元組)來編碼。

UTF-8包含全世界所有國家需要用到的字元,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支援UTF8字元集的瀏覽器上顯示。如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支援包。  

UTF8MB4:MySQL在5.5.3之後增加了utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。  

 

表情儲存異常--mybatis拋出異常(java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.