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

问题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表情被成功加入,但是在数据库里面变成了问号,如下图PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第1张图片

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

修改栏位的编码
PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第2张图片
PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第3张图片

在这里插入图片描述

修改数据库的编码
PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第4张图片
PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第5张图片
修改表的编码PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第6张图片
通用修改
PHP连接SQL数据库无法显示emoji表情的解决办法(变成问号、1366 Incorrect string value)_第7张图片

你可能感兴趣的:(PHP,+,SQL,PHP,SQL,php,mysql,数据库,sql,mariadb)