MySQL 数据库存储问号而不是特殊字符

MySQL Database stores question marks instead of special characters

我正在尝试在我的网站内显示非常特殊的字符(如 ),并将其存储到我的数据库中。 当我写这样的特殊字符时,它们会显示一次,但是当我重新加载页面并且服务器从数据库中获取字符串时,它会显示为“???????? ?????? ??? ???????? 我尝试做很多事情来解决这个问题,但 none 的方法奏效了。 这不是可视化问题,因为 header 设置正确:

<meta charset="utf-8">

我尝试做的事情:

$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

$db->query("SET character_set_results=utf8mb4");

mb_language('uni'); 

mb_internal_encoding('UTF-8');

$db->query("SET NAMES utf8mb4");

$db->set_charset('utf8mb4');

但是这些都没有用。 另外,我尝试(只是为了调试)将数据库文本字段中的字符串更改为 ,但出现错误:

Warning: #1300 Invalid utf8 character string: 'F09D91'

Warning: #1366 Incorrect string value: '\xF0\x9D\x91\xBB\xF0\x9D...' for column 'text' at row 1

我真的尝试了在这里和外部找到的所有解决方案,但没有任何效果。 任何帮助将不胜感激。

如评论中所述。

在很多情况下,您需要将所有代码放在
之后 $db->query("SET character_set_results=utf8mb4"); 在那行之前

使用不同的文件编码也有帮助。

我以前不得不自己这样做,这很奇怪。也可能是服务器的默认编码可能在某处覆盖了某些内容;我以前也遇到过这个问题。

此外,如果您在某处进行查询,例如执行 SELECT、UPDATE 或 INSERT,那么 重要 将编码代码放在请问,应该是这样吧。