MySQL 数据库存储问号而不是特殊字符
MySQL Database stores question marks instead of special characters
我正在尝试在我的网站内显示非常特殊的字符(如 ),并将其存储到我的数据库中。
当我写这样的特殊字符时,它们会显示一次,但是当我重新加载页面并且服务器从数据库中获取字符串时,它会显示为“???????? ?????? ??? ????????
我尝试做很多事情来解决这个问题,但 none 的方法奏效了。
这不是可视化问题,因为 header 设置正确:
<meta charset="utf-8">
我尝试做的事情:
- 正在将服务器的默认字符集设置为 utf8。
- 将 database/table/column 折叠和字符集设置为 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');
但是这些都没有用。
另外,我尝试(只是为了调试)将数据库文本字段中的字符串更改为 ,但出现错误:
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,那么 重要 将编码代码放在请问,应该是这样吧。
我正在尝试在我的网站内显示非常特殊的字符(如 ),并将其存储到我的数据库中。 当我写这样的特殊字符时,它们会显示一次,但是当我重新加载页面并且服务器从数据库中获取字符串时,它会显示为“???????? ?????? ??? ???????? 我尝试做很多事情来解决这个问题,但 none 的方法奏效了。 这不是可视化问题,因为 header 设置正确:
<meta charset="utf-8">
我尝试做的事情:
- 正在将服务器的默认字符集设置为 utf8。
- 将 database/table/column 折叠和字符集设置为 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');
但是这些都没有用。 另外,我尝试(只是为了调试)将数据库文本字段中的字符串更改为 ,但出现错误:
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,那么 重要 将编码代码放在请问,应该是这样吧。