ZF2 Doctrine2 MySql charset错误

时间:2013-05-02 11:23:55

标签: mysql utf-8 doctrine-orm zend-framework2

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

我的Doctrine配置将SET NAMES utf8作为连接选项,我的html文件使用utf8 charset。

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

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

我发现的唯一解决方法是在保存前输出utf8_decode,在打印前输入utf8_encode。

这意味着,出于某种原因,介于两者之间的东西正在混乱utf8与iso。

可能是什么?

感谢。

修改

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

XPTÓ - > XPTÓ

这使得在DB中搜索“XPTÓ”是不可能的......

1 个答案:

答案 0 :(得分:0)

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

通过以下各项:

  1. 原始$_POST数据
  2. 表单验证后获得的值
  3. 放入绑定实体的值
  4. 如果您使用PDO直接查询它,您将从数据库中获取的值(从中获取此信息) $em->getConnection()
  5. 重新加载时填充到您的实体中的值(可以通过$em->detach($entity); $entity = $em->find('Entity', $id);执行此操作)
  6. 您正在查看输出更改的位置,并将搜索重点放在那里。

    我还要仔细检查:

    • 在数据库中:SHOW CREATE TABLE 'table'显示整个表的CHARSET=utf8(并且各列没有任何不同)
    • 用于查看数据库值的工具(Navicat,phpMyAdmin)具有正确的编码集。