PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)

当尝试在SQL数据库中存储emoji时遇到1366Incorrect string value错误,原因是emoji需要utf8mb4编码。解决方法是在PHP连接数据库时设置charset为utf8mb4,同时确保数据库、表及字段编码均为utf8mb4,以避免出现问号显示。通过修改数据库配置,可以顺利存储并正确显示emoji表情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1

当加入emoji表情时,SQL数据库提示1366 Incorrect string value错误:

mysql 1366: Incorrect string value: '\xF0\x9F\xA5\xB0\xF0\x9F for column ‘msg’ at row 1

这是因为emoji表情符号不能直接使用普通的utf-8编码,而是要采用utf8mb4编码,在每次连接的时候把编码设置成utf8mb4才可以解决。

解决步骤:

  1. 在连接数据库的php文件里,在每次连接前都把编码都设置为utf8mb4

代码:

$conn = new PDO($dsn, $username, $password);
$conn->exec("set charset utf8mb4");

或者:

$conn = new PDO($dsn, $username, $password);
$conn->query("set character set utf8mb4");

问题2

emoji表情被成功加入,但是在数据库里面变成了问号,如下图

这是因为数据库的编码仍然是utf8,而不是utf8mb4,解决方法十分简单粗暴:把数据库里面有关字符编码的项目全部改为utf8mb4,因为utf8mb4是utf8的超集,因此不会有兼容性问题,可以放心修改

修改栏位的编码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

修改数据库的编码
在这里插入图片描述
在这里插入图片描述
修改表的编码请添加图片描述
通用修改
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值