关于MySQL 存储 emoji 字符编码已更改为uft8mb4 仍然 报错,以及修复后 SQLYog实现计划备份时报错问题

本文解决MySQL数据库存储emoji表情字符编码问题,通过调整数据库、表及列的编码为utf8mb4,并配置应用程序编码。同时,修复SQLYog计划备份时的字符集错误,确保备份任务正常执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于MySQL 存储 emoji 字符编码已更改为uft8mb4 仍然 报错问题 ,以及修复后 SQLYog实现计划备份时报错问题

有一个需求 要求可以存储 emoji 表情

可是如果将 前端返回的 字符串 插入数据库便会出现以下报错

Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x92\x95' for column 'content' at row 1

一眼便看得出是字符串不支持

mysql数据库的utf8只能三个字节,而 emoji却有四个,所有无法插入

网上提出两种解决办法:

 1. 前端js处理emoji表情,转换字符,当后端返回时再转换回来
 2. 更改数据库设计

第一种方法确实复杂,果断第二种

更改数据库设计,因为在MySQL 5.6+的版本中 已经引入了 utf8mb4 这一字节编码,这种格式的字节编码 已经支持存储 四个字节的字符了,如果对命令提示符不熟可以直接使用图形化界面

但是需要注意的是编码规则不仅仅只是存在于数据库 和 表,列也有自己的编码规则
而且
权重 : 列>表>数据库 顺便将排序规则也更改为 uft8mb4_general_ci
在sqlYog中 更改列的语言规则 是在更改表中 有一个 隐藏语言选项的复选框 将其勾选,即可出现列的字符集 以及核对

网上的大部分教程都是到了这一步

但我在试验后,仍然发现报错

偶尔发现直接使用语句插入 emoji 是可以的,于是考虑应用层的问题

笔者使用的是nodeJS果然发现,在mysql.createPool配置中的 charset 没有配置,
将其配置为 utf8mb4 再次尝试插入果然成功 其他语言请自行查看相关配置

var pool = mysql.createPool({
    host: 'localhost',
    user:'root',
    //charset:'utf8mb4'
});

在问题修复以后 SQLYog 计划备份出现问题

由于笔者有被黑客攻击数据库的经验,所以 对于备份特别看重 可是当我像往常一样设置了计划备份之后
在执行时 却出现了如下错误

Can't initialize character set unknown (path: compiled_in)Error in Connection

也是字符串的设置出了问题

考虑 到计划备份时 sql配置文件会对其结果产生影响 于是在 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_general_ci

用于配置基础的编码格式
然后重启mysql服务 尝试重新计划备份 ,备份成功问题解决

参考资料:https://www.cnblogs.com/AllenChou/p/7687072.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值