2013-05-02 37 views
0

我已经设置了一个带有utf8_unicode_ci排序规则的MySQL数据库,并且其上的所有表和列都具有相同的排序规则。ZF2 Doctrine2 MySql字符集错误

我的Doctrine配置有SET NAMES utf8作为连接选项,我的html文件使用utf8字符集。

保存在这些表格上的文本包含重音字符(á,è等)。

问题是,当我将内容保存到数据库时,它会保存奇怪的字符,比如当我尝试在UTF8表中保存ISO时。 (例如:NotÃcias)

我发现的唯一解决方法是在保存之前的utf8_decode和打印之前的utf8_encode。

这意味着,出于某种原因,之间的东西是搞乱了UTF8与ISO。

可能是什么?

谢谢。

编辑:

我设置打印前保存和解码之前编码,并正确打印,但在DB我的字符更改为:

XPTÓ - >XPTÓ

这使得在数据库中搜索“XPT”不可能...

+0

排序并不重要,它只是告诉MySQL如何命令字符串。你想确保_charset_编码设置为utf8。你能否更新你的答案,以反映你有正确的编码? – 2013-05-03 01:50:12

+0

@EzequielMuns更新 – MGP 2013-05-03 17:40:37

回答

0

我会print bin2hex($string);在原始工作流程的每一步(即没有编码/解码步骤)。

经过每个:

  1. 原始$_POST数据
  2. 值您表单验证后得到
  3. 是那些获得把你结合的实体
  4. 你会得到的值值从数据库,如果你使用PDO直接查询它(从
    $em->getConnection()
  5. 将值填入哟您可以通过$em->detach($entity); $entity = $em->find('Entity', $id);来实现此功能

您会查看输出变化的位置,并将搜索焦点集中在那里。

我也要仔细检查:

  • 在DB:SHOW CREATE TABLE 'table'显示CHARSET=utf8为整个表(并没有为各个列不同)
  • 该工具使用,看看你的数据库值( Navicat,phpMyAdmin)已经得到了正确的编码集。