MySql存储表情报错

480 篇文章 6 订阅
480 篇文章 9 订阅

前言 :sparkles:

8.0.27
mysql -uroot -p

问题:exclamation:

个人博客markdown插入标签后报以下错误

报错信息: Incorrect string value: '\\xF0\\x9F\\x98\\x82' for column 'content' at row 1

在网上查询得知:在用mysql进行表情符号存储时,会报错,这是由于Emoji表情是4个字节,而mysql的utf-8编码最多是3个字节,所以在进行表情符号插入的时候会插入不进去。那么此时应该通过修改mysql编码为utf8mb4来解决该问题。

但是我在sql表创建时已经想到了这一点并且相关字段也是utf8mb4,为什么还会报错

排查解决

通过多方查询和尝试,发现只要修改mysql配置信息就可以解决问题

1.在linux下找到mysql的配置文件 my.cnf (window为my.ini),如果找不到可以直接查询

$ find / -name my.cnf

2.在 my.cnf 修改编辑

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

3.重启mysql服务

$ service mysqld restart

mysql变量配置扩展:bulb:

1. character_set_client 主要用来设置客户端使用的字符集。

2. character_set_connection 主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。

3. character_set_database 主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。

4. character_set_filesystem 文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。

5. character_set_results 数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。

6. character_set_server 服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。

7. character_set_system 数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。

8. character_sets_dir 这个变量是字符集安装的目录。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值