java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' 資料庫儲存表情報錯
阿新 • • 發佈:2018-12-10
現在很多人都喜歡用 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的配置檔案也需要做相應的修改才能生效