繁体   English   中英

字符编码问题:MySQL 5.0 + PHP 5.2

[英]Character encoding issues: MySQL 5.0 + PHP 5.2

我有一个带有InnoDB表的MySQL数据库,该表包含utf8_general_ci varchar字段。 当我通过PHP获取它们(通过PEAR :: MDB2)并尝试输出它们(通过Smarty)时,我得到了? 符号。 我想知道如何解决该问题,这很可能是由PHP引起的。

要了解的好信息:

  • 这是我正在处理的网站的新版本,尽管旧版本未使用Smarty或MDB2,但仍存在相同的问题,因此很可能不是原因。 旧的程序员使用htmlentities()来解决此问题,但我正尝试避免这种情况。
  • 我所有文件(模板,源文件等)的字符编码均为UTF-8,不带BOM。
  • 当我显示页面时,所有带重音的字符(模板中的重音字符,而不是来自MySQL的重音字符)均正确显示,并且浏览器中的编码为UTF-8。 如果我手动将其切换到ISO-8859-1,则可以正确输出MySQL的字符,而不会输出其他字符。

基本上,似乎PHP或MySQL在查询/获取过程中的某个时刻将数据库中包含的UTF-8数据转换为ISO-8859-1,这就是我要解决的问题。

我已经做了很多搜索,但是还没有找到任何解决方案,我希望问题出在某个地方。 我想避免使用htmlentities()或utf8_encode(),但是这可能是直到出现PHP6的唯一方法。

感谢您对此的投入!

您需要执行一些查询,以告知它使用UTF-8进行连接(默认确实是Latin-1)。 这是我使用的:

SET CHARACTER SET = "utf8";
SET character_set_database = "utf8";
SET character_set_connection = "utf8";
SET character_set_server = "utf8";

我知道其中一些似乎过于矫kill过正,但它们已经过测试,并且确实运作得很好。

我的猜测是,数据到达数据库时未经过utf-8编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM