2021-11-05转载 mysql moji

测试机mysql版本为5.7.21,默认引擎为InnoDB,默认字符集为utf8。

字段插入Emoji表情具体报错内容如下:

Error updating database.  Cause: java.sql.SQLException: 
Incorrect string value: '\\xF0\\x9F\\x98\\x84' for column 'name' at row 1
### The error may involve com.lf.lffileserviceupload.dao.FileInfoMapper.insert-Inline\n### The error occurred while setting parameters
### SQL: insert into file_info (name, file_name, file_type, file_url, img_url, user_id,  create_date)   values (?, ?, ?, ?, ?, ?, ?)
### Cause: java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x84' for column 'name' at row 1; 
uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\\xF0\\x9F\\x98\\x84' for column 'name' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x84' for column 'name' at row 1"


原因分析:
根据编码规则,一个ASCII字符占1个字节,一个汉字占3个字节,标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码21位字符。mysql的utf8只支持 1 到 3 个字节,并不算真正的UTF-8 而是 utf8mb3 的别名,Emoji表情占4个字节,超过了mysql的utf8最大支持长度,所以存储失败。mysql从5.5.3版本后新增utf8mb4字符集用于存储4个字节的unicode。mb4即 most bytes 4。utf8mb4 是 utf8 的超集并完美兼容utf8,能够用四个字节存储更多的字符,对数据没任何影响。若要存储Emoji表情,只需将mysql字符编码修改为utf8mb4即可。

操作步骤:
1、查看mysql版本,确认是5.5.3或之后的版本

select version();
1
2、修改mysql配置文件my.cnf或my.ini添加以下配置内容
注意:如果是从网络其他地方下载的绿色版,配置文件名为my-default.ini,复制这个文件,将副本文件名修改为my.ini,同时保留my-default.ini和my.ini这两个文件,然后在my.ini文件中添加以下配置内容

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



注意:不要修改[client]、[mysql]、[mysqld]这三项之前已存在的配置内容,要在对用的标签下面添加以上配置项

3、重启mysql服务

4、查看mysql字符集编码变更是否生效

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

确保图上红框处的五项配置值为utf8mb4,如果是可进行下一步,如果不是则要仔细检查第2步配置是否正确。

5、修改数据库字符集编码
(1)如果是新建数据库,新建时 字符集选择 utf8mb4 – UTF-8 Unicode ,排序规则选择 utf8mb4_general_ci

(2)如果库表已存在,执行以下语句修改字符集编码

//修改数据库字符集编码
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

//修改表字符集编码
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

//修改字段字符集编码
ALTER TABLE table_name table_name CHANGE column_name VARCHAR(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

6、mysql客户端配置项修改
数据源url添加 useUnicode=true&characterEncoding=utf-8&autoReconnect=true
特别说明:characterEncoding=utf-8会自动适配utf8bm4。

注意:mysql-connector-java.jar包必须是5.1.13之后的版本,否则不支持utf8mb4。


7、插入一条带表情字段的数据,测试修改是否成功

大功告成!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值