目录

问题描述

问题分析

​问题解决

问题扩展


问题描述

工作过程中,突然收到短信和邮件 5xx 报警。通过 5xx HTTP 状态码排查 Nginx 日志、业务日志发现报如下错误:

问题分析

1 初步看,应该是说更新 name 写入 utf8 编码的 “\xF0\x9F\x92\x95” 失败了。

2 那 utf8 编码的字符串 “\xF0\x9F\x92\x95” 是什么呢?通过排查发现这个是字符串编码的是 emoji 符号,该 emoji 符号代表两颗心的意思。

上面的 emoji 结果是从 Emoji Unicode Tables 获取的,地址如下:

https://apps.timwhitlock.info/emoji/tables/unicode#block-6a-additional-emoticons

3 再次看,应该是用户想通过代表两颗心的 emoji 符号来更新 name 字段。

4 那为什么用户通过代表两颗心的 emoji 符号来更新 name 字段失败了呢?从 两颗心的 emoji 符号的 utf8 编码是 “\xF0\x9F\x92\x95” 字符串,可以看到 emoji 符号是 4 个字符。

5 那为什么编码为 4 个字符的 emoji 更新 name 的时候失败呢?由于存储 name,使用的数据库是 mysql,我们查看 user 表的字段编码是 utf8。

6 那为什么 utf8 编码的 user 表不能写入 4 个字符的 emoji 呢?通过如下命令查看 utf8 编码下,能写入的字符最大个数。

select * from information_schema.CHARACTER_SETS where CHARACTER_SET_NAME = 'utf8';

从图中可以看到 utf8 编码最大支持 3 个字符的写入。

7 最终看,由于 user 表是 utf8 编码最多支持 3 个字符的写入,不支持 4 个字符编码的 emoji 符号的写入。

​问题解决

既然是 user 表不支持 4 个字符编码的 emoji 符号的写入,我们只需要将 user 表修改成支持 4 个字符编码的 emoji 符号的写入。

MySQL 在 5.5.3 之后的版本支持了一种新的字符编码:utf8mb4。我们可以查看 utf8mb4 编码最多支持多少字符​。

select * from information_schema.CHARACTER_SETS where CHARACTER_SET_NAME = 'utf8mb4';

从图中可以看到最大支持4个字符的写入。所以 utf8mb4 编码能解决 emoji 表情符号的写入。

这块只需要将 user 表的编码修改成 utf8mb4,命令如下:

ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;

问题扩展

utf8mb4 编码在一些字符的存储消耗大于 utf8编码,如果说表需要存储 emoji 使用 utf8mb4 编码,不需要建议使用 utf8 编码。

Incorrect string value: ‘\xF0\x9F\x92\x95\’相关推荐

  1. Mysql 解决emoji表情处理问题 - Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column

    Mysql 解决emoji表情处理问题 - Incorrect string value: '\xF0\x9F\x92\x94' for column 参考文章: (1)Mysql 解决emoji表情 ...

  2. mysql xf0x9fx8ex88_【Mysql】解决插入数据出现 Incorrect string value: '\xF0\x9F\x92\x8BTi...'错误...

    背景: 用户输入的表单里边.存在 手机自带的表情,  在执行插入时候报错 Incorrect string value: '\xF0\x9F\x92\x8BTi...' 错误原因:我们在设置mysql ...

  3. Incorrect string value: '\xF0\x9F\x92\x98\xF0\x9F...'

    在使用富文本编辑器的时候,可以插入表情什么的,但是插入数据库报错: Incorrect string value: '\xF0\x9F-' for column 'XXX' at row 1 这个问题 ...

  4. Incorrect string value: '\xF0\x9F\x98\x82' for column '' at row 1

    1.一般来说Mysql(小于5.5.3)字符集设置为utf8,指定连接的字符集也为utf8,django中save unicode string是木有问题的.但是,当字符串中有特殊字符(如emoji表 ...

  5. 四位urf8存入mysql_MySql 中文写入数据库乱码及Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1解决...

    一.中文写入乱码问题 我输入的中文编码是 urf8 的,建的库是 urf8 的,但是插入MySQL总是乱码,一堆"???????????????????????".可以使用以下的方 ...

  6. 已解决Cause: java.sql.SQLException: Incorrect string value: ‘\\xF0\\x9F\\x8C\\xB8 \\xE5...‘报错

    保存订单存入数据库时,报错: "\n### Error updating database. Cause: java.sql.SQLException: Incorrect string v ...

  7. mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'

    最近在做即时聊天功能,需要支持 emoji 表情,测试直接发送时后台 mysql 数据库会报类似 java.sql.SQLException: Incorrect string value: '\xF ...

  8. Mysql错误1366的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1

    Mysql错误1366的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 原因是UTF-8编码有可能是两个.三个 ...

  9. 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案

    [Mysql]存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案 参考文章: (1)[Mysql]存储emo ...

最新文章

  1. mysql 存储 事务_MYSQL 可以在存储过程里实现事务控制吗
  2. 在Go群里摸鱼两月认识了几位号主大佬
  3. Mysql约束 笔记
  4. java中特殊流程控制语句,深入分析JAVA流程控制语句
  5. java8 多行字符串_JDK8字符串拼接的正确姿势
  6. 浅谈文件断点续传和WebUploader的基本结合
  7. 普通卷积、转置卷积、空洞卷积(dilated convolution、Atrous Convolution)
  8. 流密码:lfsr(线性反馈移位寄存器)
  9. vscode 软件 git提交代码步骤(结合webstorm软件)
  10. 【对抗攻击代码实战】对抗样本的生成——FGSM
  11. 超级记忆/图像数字记忆 110位数字图像转换表 31-40
  12. 有一种神奇的性格叫——INTJ
  13. 【经典】非你莫属名句一
  14. ads1258_ADS1258:高精度多通道模/数转换芯片
  15. java考勤系统数据库_java考勤管理系统数据库实现
  16. 斩仙java_我的世界1.7.10僵尸生存整合包
  17. 这些前端案例看似很简单(内附动图)
  18. 在计算机中字节的英文名称是bit么,计算机中的字节是常用单位,它的英文名字是( )。A.bitB.byteC.boutD.baud - 试题答案网问答...
  19. easybuy源码_easybuy数据库设计
  20. java 注册机_JAVA注册机的源代码

热门文章

  1. DICOM胶片打印服务器 放射科DICOM打印服务器 DR CT胶片打印系统
  2. ajax动态拼接复选框样式,JavaScript 通过Ajax 动态加载CheckBox复选框
  3. python : 超参数优化工具笔记 Tune with PyTorch 在PyTorch中使用
  4. 8.使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]
  5. 配置theano lasagne 和 g++加速
  6. 如何把微信状态玩出新花样?30秒就能学会的超简单教程
  7. 设z服从标准正态分布_【填空题】设Z服从标准正态分布,则 (保留四位小数)
  8. 【挑战】How to Get Highest Score in Garupa?
  9. react-native TextInput组件在模拟器Simulator上鼠标聚焦后键盘不弹出
  10. 聆听函数的声音:Mathematica的声音函数试验