同一数据集输出不同的字符:phpmyadmin/own查询
我试图从数据库中获取一些数据,但输出不是我所期望的。同一数据集输出不同的字符:phpmyadmin/own查询,php,mysql,character-encoding,Php,Mysql,Character Encoding,我试图从数据库中获取一些数据,但输出不是我所期望的。 在数据库上执行我自己的查询时,我得到以下输出:string'C�特德�(长度=13) 从phpmyadmin查询数据库,我得到正常输出:科特迪瓦 php.ini默认字符集、mysql db默认字符集、字符集都设置为utf-8 我无法确定编码是在哪里进行的,我得到的是相同配置的不同输出 注意:使用mysqli驱动程序。如果您使用命令行工具mysql进行“自己的查询”,您还必须设置选项——default character set=utf8。否则
在数据库上执行我自己的查询时,我得到以下输出:
string'C�特德�(长度=13)
从phpmyadmin查询数据库,我得到正常输出:科特迪瓦
php.ini默认字符集、mysql db默认字符集、
字符集都设置为utf-8
我无法确定编码是在哪里进行的,我得到的是相同配置的不同输出
注意:使用mysqli驱动程序。如果您使用命令行工具mysql进行“自己的查询”,您还必须设置选项
——default character set=utf8
。否则,请告诉我们您如何进行自己的查询。如果您使用命令行工具mysql进行“自己的查询”,您还必须设置选项--default character set=utf8
。否则,请告诉我们您自己是如何进行查询的。在给出错误结果的同一页面中,请尝试先运行此指令
print base64_encode("Côte");
正确答案是Q8O0dGU…
。如果您得到其他字符集,如Q/R0ZQo…
,这意味着您的脚本正在使用另一个字符集(这里是拉丁语-1)而不是UTF-8。MySQL和浏览器也有可能在玩把戏,但上面的那行确保PHP和/或您的编辑器在欺骗您
接下来,从数据库中提取C
,并输出其base64_encode
。如果您看到Q8O0…
,那么MySQL和PHP之间的连接是安全的UTF8。如果没有,那么无论还需要什么,您都需要更改MySQL字符集(SET NAMES utf8
和/或表和数据库排序规则的ALTER
)
如果PHP是UTF8,MySQL是UTF8,但仍然可以看到无效字符,那么这就是PHP和浏览器之间的关系。验证内容类型标头是否正确发送;如果没有,请尝试将其作为脚本中的第一件事发送给自己:
Header('Content-Type: text/html; charset=UTF8');
例如,在Apache配置中,您应该
AddDefaultCharset utf-8
还要验证您的浏览器未设置为同时覆盖服务器字符集和自动检测
注意:根据经验,如果您得到的是一个带有问号的菱形而不是UTF8国际字符,这意味着UTF8读取器收到的UTF8代码点无效。换句话说,显示菱形的实体(您的浏览器)需要UTF8,但需要接收其他内容,例如Latin1 a.k.a.ISO-8859-15
另一种难以跟踪的获取错误的方法是,如果输出以某种方式包含字节顺序标记(BOM)。如果您创建一个文件,例如
###<?php
Header("Content-Type: text/html; charset=UTF8");
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF8" />
</head>
<body>
Hellò, world!
</body>
</html>
###
见鬼,世界!
其中####是一个(在大多数编辑器中不可见)UTF8 BOM。要删除该文件,如果编辑器允许,您需要将文件保存为“无BOM”,或者使用其他编辑器。在给出错误结果的同一页面中,请尝试先运行此说明
print base64_encode("Côte");
正确答案是Q8O0dGU…
。如果您得到其他字符集,如Q/R0ZQo…
,这意味着您的脚本正在使用另一个字符集(这里是拉丁语-1)而不是UTF-8。MySQL和浏览器也有可能在玩把戏,但上面的那行确保PHP和/或您的编辑器在欺骗您
接下来,从数据库中提取C
,并输出其base64_encode
。如果您看到Q8O0…
,那么MySQL和PHP之间的连接是安全的UTF8。如果没有,那么无论还需要什么,您都需要更改MySQL字符集(SET NAMES utf8
和/或表和数据库排序规则的ALTER
)
如果PHP是UTF8,MySQL是UTF8,但仍然可以看到无效字符,那么这就是PHP和浏览器之间的关系。验证内容类型标头是否正确发送;如果没有,请尝试将其作为脚本中的第一件事发送给自己:
Header('Content-Type: text/html; charset=UTF8');
例如,在Apache配置中,您应该
AddDefaultCharset utf-8
还要验证您的浏览器未设置为同时覆盖服务器字符集和自动检测
注意:根据经验,如果您得到的是一个带有问号的菱形而不是UTF8国际字符,这意味着UTF8读取器收到的UTF8代码点无效。换句话说,显示菱形的实体(您的浏览器)需要UTF8,但需要接收其他内容,例如Latin1 a.k.a.ISO-8859-15
另一种难以跟踪的获取错误的方法是,如果输出以某种方式包含字节顺序标记(BOM)。如果您创建一个文件,例如
###<?php
Header("Content-Type: text/html; charset=UTF8");
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF8" />
</head>
<body>
Hellò, world!
</body>
</html>
###
见鬼,世界!
其中####是一个(在大多数编辑器中不可见)UTF8 BOM。要删除它,如果编辑器允许,您需要将文件另存为“无BOM”,或者使用其他编辑器。就像我在p.S.中所说的,使用mysli驱动程序(这就是我指的自己的查询)。。。使用phpmyadmin作为mysql的工具。正如我在P.S.中所说的,使用mysli驱动程序(这就是我所指的自己的查询)。。。使用phpmyadmin作为mysql的工具。是的,它来自数据库服务器端。我已经为数据库设置了字符集,但没有工作。现在我已经将它设置为服务器启动,它可以工作了。我想它也可以通过只设置一个db来工作。谢谢你的帮助。是的,它来自数据库服务器端。我已经为数据库设置了字符集,但没有工作。现在我已经将它设置为服务器启动,它可以工作了。我想它也可以通过只设置一个db来工作。谢谢你的帮助。