MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: “xxxx’for column ‘name’ at row 1)异常「建议收藏」

MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: “xxxx’for column ‘name’ at row 1)异常「建议收藏」今天有业务员反应,编辑某个用户的信息的时候出现了异常,异常信息如下: Incorrect string value: ‘xFOx9Fx92x9D vxE6..’f or column ‘name’ a

MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: "xxxx'for column ‘name’ at row 1)异常

今天有业务员反应,编辑某个用户的信息的时候出现了异常,异常信息如下:
Incorrect string value: “xFOx9Fx92x9D vxE6..”f or column “name” at row 1
我让她发个截图看看,结果发现该用户的昵称如下:
MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: "xxxx'for column ‘name’ at row 1)异常「建议收藏」

原图
MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: "xxxx'for column ‘name’ at row 1)异常「建议收藏」

该昵称是微信昵称,也未免会带一些特殊符号或者,既然异常由数据库抛出,我们不妨查看一下该字段的字符集:
MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: "xxxx'for column ‘name’ at row 1)异常「建议收藏」

原来如此

最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。

Mysql 中的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。那时候,Unicode 委员会还做着 “65535 个字符足够全世界用了”的美梦。Mysql 中的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100) Mysql 会保留 300字节长度。至于后续的版本为什么不对 4 字节长度的 UTF-8 字符提供支持,我想一个是为了向后兼容性的考虑,还有就是基本多文种平面之外的字符确实很少用到。

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。

我们尝试作出修改:

MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: "xxxx'for column ‘name’ at row 1)异常「建议收藏」

将utf8字符集修改为utf8mb4之后,通知业务员重新操作。业务员反应操作成功了。。。心里美滋滋

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9915.html

(0)
上一篇 2023-01-29 16:00
下一篇 2023-01-29

相关推荐

  • Mysql大厂高频面试题「建议收藏」

    Mysql大厂高频面试题「建议收藏」前言 前几天有读者找到我,说想要一套全面的Mysql面试题,今天陈某特地为她写了一篇。 文章的目录如下: Mysql面试题 什么是SQL? 结构化查询语言(Structured Query Langu

    2023-02-19
    92
  • redis中hash数据类型[通俗易懂]

    redis中hash数据类型[通俗易懂]website相当于map的名字 google相当于map website中的key,"www.google.com"是key google的value

    2023-01-26
    109
  • Python Tuples: 简洁高效的多元素数据结构

    Python Tuples: 简洁高效的多元素数据结构Python中的元组(Tuples)是一个有序的多元素集合,可以存储不同类型的数据。与列表相比,元组是一个不可变对象,即一旦创建就不能修改内容。元组被广泛应用于函数返回多个值或者在字典作为键使用的情况等。下面我们将通过如何创建、访问、修改以及结合其他对象使用等多个方面对Python元组进行详细讲解。

    2024-03-16
    32
  • fill方法_rolling animator参数

    fill方法_rolling animator参数介绍Fillfactor前先帮助大家回顾一下,Postgresql数据库的物理结构。 在没有非默认表空间的情况下,Postgresql的每个数据库均存放在一个目录中,以数据库oid命名,该目录中存放…

    2023-04-10
    121
  • 简单python逆向分词(python分词函数)

    简单python逆向分词(python分词函数)中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的。

    2023-10-31
    82
  • Python判断字符串中是否包含指定字符串的方法

    Python判断字符串中是否包含指定字符串的方法在Python开发中,我们常常需要对字符串进行处理。要想对字符串进行操作,首先需要对字符串的特定部分进行定位,判断其是否包含指定的字符串是至关重要的。在本文中,我们将详细解释Python中判断字符串中是否包含指定字符串的方法。

    2024-05-10
    14
  • Python字符串的分割方法:split()

    Python字符串的分割方法:split()在Python中,字符串是一个非常常用的数据类型。在处理字符串时,有许多方法可以使用,其中最常用的莫过于split()方法。split()方法可以将一个字符串分割成多个子字符串,返回一个包含子字符串的列表。split()方法还可以接收一个参数,用于指定分割字符,如果不指定,则默认以空格为分隔符。

    2023-12-04
    75
  • 「从零单排canal 02」 canal集群版 + admin控制台 最新搭建姿势(基于1.1.4版本)

    「从零单排canal 02」 canal集群版 + admin控制台 最新搭建姿势(基于1.1.4版本)canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费。应该是阿里云DTS(Data Transfer Serv…

    2023-03-09
    106

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注