同一数据集输出不同的字符: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来工作。谢谢你的帮助。