这个错误是字符编码的问题 , 因为内容里有可能有表情等特殊字符 , 需要使用utf8mb4编码
重点还有一个是 , 在php代码中连接上mysql后一定要执行一下 set name utf8mb4 否则也是不行的
比如下面这个表的字符编码
create table table_name(
id int unsigned auto_increment,
)engine=innodb charset=utf8mb4;
比如下面的PHP代码:
$this->pdo->exec("set names utf8mb4");
这里说明一点:utf8mb4 是向下兼容 utf8 的,意思是,如果之前的数据库和数据表设置的编码是 utf8,php 通过 set names utf8mb4 来读写 utf8 的数据库(表)是正常的,但如果要输入特殊字符的话就必须修改数据库(表)的编码为 utf8mb4 。
2022-11-04 记:
utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。不然中文会变成乱码的现象
因此如果要兼容低版本的目的,就必须做 mysql 版本号的判断,如:
if (mysqli_get_server_version(self::$conn) >= 50530) {
mysqli_set_charset(self::$conn, 'utf8mb4');
} else {
mysqli_set_charset(self::$conn, 'utf8');
}