Spring Boot Data JPA support Emoji

最近項目中出現一個問題,MySQL插入帶有表情的數據會報錯,以往的處理方式都是改一下數據庫編碼爲utf8mb4就行了,但是這次怎麼試怎麼試都不行,以往用的持久層框架是mybatis,也不知道是不是和框架有關,現在用的是SpringDataJPA ,自己去查了資料,用以下這種方式可以解決問題。

在項目中使用到Emoji表情保存(MySQL),出現異常,解決方法分爲兩個部分:

一. 服務端:

數據庫/表/字段均採用UTF8編碼,MySQL的說法爲:

  • The utf8 Character Set (3-Byte UTF-8 Unicode Encoding)

  • The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)

UTF8爲3個字節,爲4個字節,而Emoji爲4個字節,所以在插入時會出現異常:

INSERT INTO ${table} (${field}) VALUES ('What a nice emoji?!');

Incorrect string value: '\xF0\x9F\x98\x80!' for column '${field}' at row 1

修改表/字段的編碼爲UTF8MB4:

ALTER TABLE `${table}` CHARACTER SET = utf8mb4;
ALTER TABLE `${table}` CHANGE `${field}` `${field}` VARCHAR(1200)  CHARACTER SET utf8mb4  NULL  DEFAULT NULL;

測試插入:

INSERT INTO ${table} (${field}) VALUES ('Now you are ready to handle emoji ?');

select ${field} from ${table}

+--------------------------------------+
| Level                                |
+--------------------------------------+
| Now you are ready to handle emoji ? |
+--------------------------------------+
二. 客戶端:

添加如下配置(配置的key根據使用的連接池來確定):

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/base-architecture?useUnicode=true&characterEncoding=utf8
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      connection-init-sql: SET NAMES utf8mb4
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章