mysql:报错Incorrect string value:’\xF0\x9F\x94\xA6\xF0\x9F…’
一,报错信息:
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)