首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP5.2.10和MySQL 5.0.81损坏UTF-8字符

使用PHP5.2.10和MySQL 5.0.81损坏UTF-8字符
EN

Stack Overflow用户
提问于 2010-01-18 14:54:53
回答 5查看 2.6K关注 0票数 2

我们有一个托管在本地开发服务器和活动站点上的应用程序。我们正在经历UTF-8腐败问题,并正在寻找解决这些问题的方法。

该系统使用symfony 1.0与Propel一起运行。

在我们的开发服务器上,我们运行PHP5.2.0和MySQL 5.0.32。我们没有经历损坏的UTF-8字符在那里。

在我们的活动站点上,PHP5.2.10和MySQL 5.0.81正在运行。在该服务器上,某些字符(如́和Σ)一旦存储在数据库中就会损坏。损坏的字符显示为问号或与相邻问号接近的原始字符。

腐败的例子:

未损坏:́损坏:?

未损坏:Σ已损坏:?

我们目前在开发和活动服务器上都使用了以下技术:

  1. 在执行任何其他查询之前执行下列查询: 设置名称'utf8‘,整理'utf8_unicode_ci’,设置字符集'utf8‘
  2. <meta>内容类型值设置为:
  3. 在我们的.htaccess文件中添加以下内容: AddDefaultCharset utf-8
  4. 在必要时使用mb_* (多字节) PHP函数。
  5. 确保将数据库列设置为使用utf8_unicode_ci排序规则。 这些技术对于我们的开发站点来说是足够的,但是不能在活动站点上工作。

在现场网站上,我也尝试过添加mysql_set_encoding('ut8', $mysql_connection),但这也没有帮助。我发现了一些新版本的PHP和MySQL错误处理UTF-8字符编码的证据。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-19 19:02:44

我们有经验的系统管理员发现了一个修复方法:

alter database DB_NAME character set utf8;

这完全解决了我们的问题。

票数 1
EN

Stack Overflow用户

发布于 2010-01-18 16:26:25

以一个最小的例子为例--提交一个带有Σ字符的表单,并将路径中从浏览器到数据库的位置隔离开来。在从浏览器收到请求后,将bin2hex($str)的值打印到PHP应用程序中的日志中,这是将其传递给数据库之前的最后一件事,以及任何您怀疑可能是问题区域的地方--对于Σ,它应该打印出cea3。在数据库中,对保存的数据运行charset(col)、十六进制(Col)--如果全部正常工作,就应该打印出"utf8","cea3“

你能更清楚地了解这些字符是如何被破坏的--它们是否显示为空白?像蛋糕一样吗?空的“豆腐”盒子?问题字符处的字符串截断了吗?什么是预期的字节表示和观察到的字节表示?-你将有更多的线索,关于什么可能导致它。

票数 3
EN

Stack Overflow用户

发布于 2010-01-18 15:36:06

注意,如果您使用的是Doctrine或Propel,那么mysql_set_encoding()将不会产生任何效果,因为这两个or都是基于PDO的(Propel < 1.3是基于Creole/Mysqli的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2086820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档