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

吾爱主题 阅读:131 2024-04-02 18:54:52 评论:0
目录
  • 前言 

  • 问题

  • 排查解决

  • 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,为什么还会报错

1-220FQ11P2312.jpg


排查解决

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

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

?  

1$ find / -name my.cnf  

2.在my.cnf修改编辑

?  

1   2   3   4   5   6   7   8   9[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服务

?  

1$ 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)

?  

1   2   3   4   5   6   7   8   9   10[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

?  

1service mysql restart  

3、查看是否修改成功

?  

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

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

1-220FQ11QI13.png


总结

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

原文链接:https://juejin.cn/post/7117551811371728910

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容