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

时间:2016-08-25 11:33:11

标签: php mysql utf-8 special-characters utf8mb4

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

<meta charset="utf-8">

我尝试做的事情:

  • 将服务器的默认字符集设置为utf8。
  • 将数据库/表/列折叠并将charset设置为utf8mb4_unicode_ci
  • 将连接字符串更改为:
$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');

但这些事情都没有奏效。 另外,我尝试(仅用于调试)将数据库的文本字段中的字符串更改为,并且出现错误:

  

警告:#1300 utf8字符串无效:'F09D91'

     

警告:#1366字符串值不正确:'\ xF0 \ x9D \ x91 \ xBB \ xF0 \ x9D ...'代表第1行的'text'列

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

1 个答案:

答案 0 :(得分:4)

正如评论中所讨论的那样。

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

同样使用不同的文件编码也可以提供帮助。

我以前必须自己做,奇怪的是。它也可能是服务器的默认编码,可能会覆盖某些地方;我之前也遇到过这个问题。

另外,如果你在某处查询,比如在SELECT,UPDATE或INSERT中查询,那么编码代码放在查询之前是重要,如果是这样的话。