MySql存储表情报错的排查解决

 更新时间:2022年07月08日 08:26:17   作者:风继续吹1943  
随着互联网的发展,产生了许多新类型的字符,例如emoji这种类型的符号,也就是我们通常在聊天时发的小黄脸表情,下面这篇文章主要给大家介绍了关于MySql存储表情报错的排查解决,需要的朋友可以参考下

前言 

  • 操作系统:linux
  • 数据库版本: 8.0.27
  • 查看版本命令:mysql -uroot -p 登录成功后就可以看到

问题

个人博客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变量配置扩展

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这个变量是字符集安装的目录。

补充

在实际开发中,我们应该提前约定好字符集,而不是后面随意更改,随意更改可能会影响到原有数据显示问题;可以更改mysql默认配置,将其设为utf8mb4具体操作如下:

1、修改mysql配置文件(windows:my.ini;linux:my.cnf)

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
#character-set-server=utf8 这行注释掉
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

2、重启mysql

service mysql restart

3、查看是否修改成功

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

下图红框内为utf8mb4信息即为修改成功

总结

到此这篇关于MySql存储表情报错排查解决的文章就介绍到这了,更多相关MySql存储表情报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL索引详细解析

    MySQL索引详细解析

    索引是有双面性的,合理的建立索引可以提高数据库的效率。但是如果没有合理的构建索引和使用索引,可能会导致索引失效或者影响数据库性能,这篇文章主要介绍了MySql索引原理与操作
    2022-10-10
  • Navicat连接mysql报错2003(10060)的解决方法

    Navicat连接mysql报错2003(10060)的解决方法

    本来好好的navicat连接数据库,突然间今天就打不开数据库了,下面这篇文章主要给大家介绍了关于Navicat连接mysql报错2003(10060)的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 浅析MySQL 备份与恢复

    浅析MySQL 备份与恢复

    这篇文章主要介绍了MySQL 备份与恢复的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • Mysql指定某个字符串字段前面几位排序查询方式

    Mysql指定某个字符串字段前面几位排序查询方式

    这篇文章主要介绍了Mysql指定某个字符串字段前面几位排序查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Mysql中key和index的区别点整理

    Mysql中key和index的区别点整理

    在本篇文章里小编给大家整理的是关于Mysql中key和index的区别点整理,需要的朋友们可以学习下。
    2020-03-03
  • mysql5.6 主从复制同步详细配置(图文)

    mysql5.6 主从复制同步详细配置(图文)

    这篇文章主要介绍了mysql5.6 主从复制同步详细配置,但不是很详细推荐大家看下脚本之家以前的文章,需要的朋友可以参考下
    2016-04-04
  • MYSQL表中某字段所有值大小写转换

    MYSQL表中某字段所有值大小写转换

    这篇文章主要为大家介绍了MYSQL表中某字段所有值大小写转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Mysql8.0递归查询的简单用法示例

    Mysql8.0递归查询的简单用法示例

    在项目中会遇到同一个表中保存着父子关系的数据,最常见的就是处理树形结构资源,这篇文章主要给大家介绍了关于Mysql8.0递归查询的简单用法,需要的朋友可以参考下
    2021-08-08
  • mysql删除重复记录语句的方法

    mysql删除重复记录语句的方法

    查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。
    2010-06-06
  • MySQL查询表中某列字段相同的重复数据的方法

    MySQL查询表中某列字段相同的重复数据的方法

    在数据库查询中,我们经常需要查找表中某列中重复的数据,本文将介绍如何使用 SQL 查询语句来查找表中某列字段相同的重复数据,帮助你快速定位重复数据问题并进行处理
    2023-08-08

最新评论