分享

解决Springboot JPA + mysql 无法添加emoji问题

 quasiceo 2018-08-19

解决Springboot JPA + mysql 无法添加emoji问题

2018年04月20日 15:55:15
阅读数:255

假设你数据库用的是utf-8编码,在没有解决emoji编码之前,会报类似以下错误:

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

其原因是因为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;
  • 1

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

修改数据库编码: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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

完成了第一步,你就可以通过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 //这是最重要的一步
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

完成上述两步,就可以通过JPA插入emoji了,开森!

版权声明:本文为博主原创文章,您可自由转载,但请保留博主信息和文章链接URL。 https://blog.csdn.net/qq_22600319/article/details/80019938
文章标签: emoji springboot JPA
个人分类: SpringBoot
▼查看关于本篇文章更多信息
想对作者说点什么? 我来说一句

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多