mysql:报错Incorrect string value:’\xF0\x9F\x94\xA6\xF0\x9F…’

发布时间 2023-06-18 14:17:37作者: 刘宏缔的架构森林

一,报错信息:

1,报错:

Incorrect string value: '\xF0\x9F\x94\xA6\xF0\x9F...' for column 'content' at row 1

报错的原因:

字符串中包含了emoji表情:

如:

???️

??️?

2,运行环境:

mysql 8.0.x

php 7.4.x

数据表的collation: utf8mb4_0900_ai_ci

这些都是支持emoji的

按理来说不应该出现报错

二,解决:

检查所用的php框架,

使用了一个封装mysqli的orm类,

找到其连接数据库的代码:

1
2
3
4
5
6
7
$mysqli = new mysqli($host,$username,$password,$data_base);
        if (mysqli_connect_errno()) {
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }
        $mysqli->set_charset('utf8');
        return $mysqli;

如上,把设置字符集修改为utf8mb4,

1
$mysqli->set_charset('utf8mb4');

然后问题解决

这个其实就是php向mysql数据库执行 ‘set names utf8mb4

旧代码中只写了utf8,所以不支持emoji

说明:刘宏缔的架构森林—专注it技术的博客,
网站:https://blog.imgtouch.com
原文: https://blog.imgtouch.com/index.php/2023/06/18/mysql-bao-cuo-incorrect-string-value-xf0-x9f-x94-xa6-xf0-x9f/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

三,查看mysql的版本:

[root@img mysql]# /usr/sbin/mysqld -V
/usr/sbin/mysqld  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)