1. 程式人生 > >java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' 資料庫儲存表情報錯

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' 資料庫儲存表情報錯

現在很多人都喜歡用 emoji表情作為名稱
在開發小程式儲存使用者登入資訊的時候,儲存使用者名稱稱一直報錯:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94'

這是因為之前資料的utf8只能儲存3個位元組,而 emoji表情有些需要佔4個直接,所以資料庫儲存不了,報錯了。

解決方案:
1、要想解決emoji表情表情的問題,需要使用utf8mb4編碼。而這種編碼格式需要在mysq5.5以上版本才有。

2、和絕大多數教程一樣,找到需要儲存的庫、表、儲存欄位 修改utf8mb4編碼。如圖:
這裡寫圖片描述

3、修改完上面後,就已經完成了第一步,第二步需要修改mysql的配置才能生效,在修改之前可以看下自己的mysql配置,在mysql終端/mysql管理工具執行:

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

很多人運行了之後,其實配置中的編碼並不是utf8mb4的。而是預設的utf8甚至是其他的編碼。
以下是我測試過正確的配置的截圖:
這裡寫圖片描述

4、修改mysql的編碼配置:
1)linux平臺下:

vi /etc/my.cnf

#在mysq.cnf中,找到相關的配置(比如找到[client] 在下面新增相關的配置)
如果linux下的配置檔案沒有[client]之類的配置,
那麼直接把下面這段複製加入配置檔案中即可:

[client]
default-character-set
=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-client-handshake=FALSE character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' #重啟mysql service mysqld restart

在使用第3步中的查詢語句,看到字元編碼改過來,那就算是真正可以了

2)window平臺下:
找到my.ini配置檔案(通常在C:\ProgramData\MySQL\MySQL Server 5.6

目錄下)
也是和linux配置一樣,找到對應的節點,加入相關的配置,和linux平臺操作類似,然後重啟mysql服務。

在呼叫介面,就發現字元已經可以存進來了,部分字元可能會顯示口字,可是並不影響使用,親測有效

切記:在修改了mysq儲存欄位的編碼後,mysql的配置檔案也需要做相應的修改才能生效