Nemo

Nemo 关注TA

路漫漫其修远兮,吾将上下而求索。

Nemo

Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,496,113字

该文章投稿至Nemo社区   数据库  板块 复制链接


mysql插入emoji表情异常: java.sql.SQLException: Incorrect string value: '\xE6\x98' for column

发布于 2018/11/15 10:28 17,540浏览 0回复 670

ac6eddc451da81cb037c289d5366d016082431c3.jpg

首先,看到这个问题大致推测应该是字符编码的原因。


查了下资料,了解到UTF-8编码有可能是两个、三个、四个字节,而emoji或者某些特殊符号则占用四个字节。
mysql中的utf-8编码最多存储却为三个字节。

所以导致了该异常:

java.sql.SQLException: Incorrect string value: '\xE6\x98\x88\xE8\xAE\xA152' for column

大概mysql的utf8编码最大存储3个字节是为了节省空间吧,这里还没有做考证。


了解到mysql中提供了存储4个字节的utf8编码格式:utf8mb4,所以问题可以降级为修改数据库一类的编码即可。

1、数据库的编码修改为utf8mb4:

ALTER DATABASE cynthia CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2、修改一些数据库相关配置,默认连接设置为utf8mb4:

[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'



这时候重启下数据库,问题即可解决。

本文标签
 {{tag}}
点了个评