假設(shè)你數(shù)據(jù)庫用的是utf-8編碼,在沒有解決emoji編碼之前,會報類似以下錯誤:
Incorrect string value: '\xF0\x9F\x98\xAC' for column 'user_name'- 1
其原因是因為utf8無法保存emoji表情。在寫解決辦法之前先補(bǔ)充一下utf8mb4的概念:
什么事utf8mb4?utf8mb4它是utf8的超集并兼容utf8的所有字符集,其中mb4表示most bytes
4,就是說字符編碼可以用1~4個字節(jié)去編碼。
用utf8mb4的原因:
在mysql中utf8只支持字符長度最大為3個字節(jié)的字符,而emoji是長度為4個字節(jié)的字符,因此,普通的utf8編碼不能滿足emoji的要求,這時就需要用到utf8mb4編碼。(提示:utf8mb4要求mysql版本在5.5.3以上)
下面進(jìn)入正題,如何解決題目中emoji問題:
第一步,修改對應(yīng)字段編碼,將其改為utf8mb4編碼
修改字段編碼:ALTER TABLE table_name CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 NULL DEFAULT NULL;- 1
附上可能需要用到的其他操作:
修改數(shù)據(jù)庫編碼:SET character_set_database = utf8mb4; 或
alter database db_name character set utf8mb4
修改數(shù)據(jù)表編碼:ALTER TABLE db_name CHARACTER SET = utf8mb4;
查看數(shù)據(jù)庫編碼:SHOW CREATE DATABASE db_name;
查看表編碼:SHOW CREATE TABLE tb_name;
查看字段編碼:SHOW FULL COLUMNS FROM col_name;- 1
- 2
- 3
- 4
- 5
- 6
完成了第一步,你就可以通過mysql手動插入emoji數(shù)據(jù),但是通過Springboot插入數(shù)據(jù)還是會報錯,這時就需要下面這步:
第二步修改tomcat的sql插入編碼,修改yml文件:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
username: root
password: '123456'
tomcat:
init-s-q-l: SET NAMES utf8mb4 //這是最重要的一步- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
完成上述兩步,就可以通過JPA插入emoji了,開森!




