Php MySQL的编码问题(和基础知识)

Php MySQL的编码问题(和基础知识),php,mysql,iis,Php,Mysql,Iis,我知道这个问题的定义可能看起来太不具体,所以我将尝试提供所有相关数据 在这个地方,我表现得像个招待。我们有一个针对MySQL的PHP页面。有人在MySQL实例上做了一些操作,这导致了问题字符(ñ、重音等)的可视化问题(仅此而已,这是一个错误) 我已经测试了很多选择,但我认为我缺乏知识使我失明。我知道这很常见,所以也许我们可以建立一些“清单” 如果我在MySQL实例上键入“status”,我会得到: Server version: 5.5.15 MySQL Community Se

我知道这个问题的定义可能看起来太不具体,所以我将尝试提供所有相关数据

在这个地方,我表现得像个招待。我们有一个针对MySQL的PHP页面。有人在MySQL实例上做了一些操作,这导致了问题字符(ñ、重音等)的可视化问题(仅此而已,这是一个错误)

我已经测试了很多选择,但我认为我缺乏知识使我失明。我知道这很常见,所以也许我们可以建立一些“清单”

如果我在MySQL实例上键入“status”,我会得到:

Server version:         5.5.15 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
UTF8中的所有内容…太棒了!。如果我连接HeidiSQL并检查得到的变量:

character_set_client     utf8
character_set_connection utf8
character_set_database   utf8
collation_collection     utf8_general_ci
collation_database       utf8_general_ci
然而,不幸的是,访问页面会返回奇怪的字符�. META标记中的内容字符集也是UTF-8

我知道可以在代码中进行一些修改,以强制连接在某些字符集中发生。但是,除此之外,最令人难以置信的是该页面正在运行

有人知道benn在服务器中改变了什么导致了这种行为吗

一如既往,非常感谢


PS:我们特别感兴趣的是来自服务器配置的方面。更改客户端的源代码是我们要避免的事情。

HTTP头呢?如果标头中是字符编码定义,则不会应用元定义。

如果代码在未将字符集设置为UTF的情况下将数据输入MySQL,则可能会导致以下问题:

连接到DB和DB表后,运行:

mysql_set_charset ( 'utf-8' );

PHP和MySQL之间的默认通信字符集仍然不是UTF-8。

所以它以前可以工作,但现在已经停止工作了?我不确定我是否理解。是的,我们相信这是因为有人做了手术。。。所以我们想知道什么样的配置更新会导致这种情况。谢谢Pekka:)
PHP和MySQL之间的默认通信字符集仍然不是UTF-8。
如果在MySQL配置中强制使用UTF-8,我不确定这是否正确?谢谢。问题是,我知道这种行为是由服务器中的一些修改引起的。修改应用程序客户端代码这是我们想要避免的事情。你能为我澄清一些事情吗?“mysql实例上的操作”是如何发生的。例如,它是直接从命令行到mysql,还是通过从mysql转储文件导入,通过phpMyAdmin,还是通过其他客户端完成的?是显示此操作之前数据库中已损坏字符数据的数据(在这种情况下,服务器显示错误的字符集),还是由操作引入或在操作之后引入的数据(在这种情况下,数据库中的数据位于错误的字符集,并且不确定是否有方法修复它)再次你好,弗雷迪,谢谢你抽出时间。我们认为更改是通过一些客户端完成的(可能是控制台或具有root权限的HeidiSQL)。数据以前在数据库中,所以我也认为服务器向客户端发送了错误的字符集。但是,如果我列出相关变量,它们总是出现在UTF8.Hmmm中。有趣的是,我自己的MySQL数据库几乎所有内容都被设置为“拉丁1”编码,但它可以很好地恢复和发送UTF-8数据,包括许多奇怪的字符。问题是数据是以二进制形式存储的,所以据我所知,字符集并不重要,只要显示数据的任何东西(在本例中是PHP)知道它应该以UTF-8的形式显示。因此,具有讽刺意味的是,如果数据作为UTF-8字符代码输入,并且在输出时被解释为UTF-8代码,那么即使数据库是拉丁语1,它也将显示为UTF-8…下一个注释继续。我如何知道更多关于HTTP头的信息?。使用HTTP检查器,我将UTF8视为已接受的字符集并返回,但仅此而已。在响应标题中,您应该看到内容类型:[……],如果有。显示:内容类型text/html;字符集=utf-8