【问题标题】:ZF2 Doctrine2 MySql charset errorZF2 Doctrine2 MySql 字符集错误
【发布时间】:2013-05-02 11:23:55
【问题描述】:

我用 utf8_unicode_ci 排序规则设置了一个 MySQL 数据库,它上面的所有表和列都有相同的排序规则。

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

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

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

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

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

可能是什么?

谢谢。

编辑:

我已经设置在保存之前进行编码,在打印之前进行解码,它可以正确打印,但在 DB 中我的字符变为:

XPTÓ -> XPTÓ“

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

【问题讨论】:

  • 排序规则无关紧要,它只是告诉 MySQL 如何对字符串进行排序。您要确保 charset 编码设置为 utf8。你能更新你的答案以反映你有正确的编码吗?
  • @EzequielMuns 已更新

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


【解决方案1】:

我会在原始工作流程的每个步骤中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)具有正确的编码集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多