1. 程式人生 > >解決Springboot JPA + mysql 無法新增emoji問題

解決Springboot JPA + mysql 無法新增emoji問題

假設你資料庫用的是utf-8編碼,在沒有解決emoji編碼之前,會報類似以下錯誤:

Incorrect string value: '\xF0\x9F\x98\xAC' for column 'user_name'

其原因是因為utf8無法儲存emoji表情。在寫解決辦法之前先補充一下utf8mb4的概念:

什麼事utf8mb4?utf8mb4它是utf8的超集併兼容utf8的所有字符集,其中mb4表示most bytes
4,就是說字元編碼可以用1~4個位元組去編碼。

用utf8mb4的原因:

在mysql中utf8只支援字元長度最大為3個位元組的字元,而emoji是長度為4個位元組的字元,因此,普通的utf8編碼不能滿足emoji的要求,這時就需要用到utf8mb4編碼。(提示:utf8mb4要求mysql版本在5.5.3以上)

下面進入正題,如何解決題目中emoji問題:

第一步,修改對應欄位編碼,將其改為utf8mb4編碼

修改欄位編碼:ALTER TABLE table_name CHANGE column_name column_name VARCHAR(255)  CHARACTER SET utf8mb4  NULL  DEFAULT NULL;

附上可能需要用到的其他操作:

修改資料庫編碼:SET character_set_database = utf8mb4;alter database db_name character set utf8mb4
修改資料表編碼:ALTER TABLE
db_name CHARACTER SET = utf8mb4;
檢視資料庫編碼:SHOW CREATE DATABASE db_name; 查看錶編碼:SHOW CREATE TABLE tb_name; 檢視欄位編碼:SHOW FULL COLUMNS FROM col_name;

完成了第一步,你就可以通過mysql手動插入emoji資料,但是通過Springboot插入資料還是會報錯,這時就需要下面這步:

第二步修改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 //這是最重要的一步

完成上述兩步,就可以通過JPA插入emoji了,開森!