带有 Symfony2 的 Doctrine2 无法识别数据库字符集和排序规则

Posted

技术标签:

【中文标题】带有 Symfony2 的 Doctrine2 无法识别数据库字符集和排序规则【英文标题】:Doctrine2 with Symfony2 not recognizing db charset and collation 【发布时间】:2013-04-28 07:52:14 【问题描述】:

我试图让 Doctrine2 在 debian 挤压系统上与 Symfony2 中的 mysql 数据库一起正常工作。 数据库的字符集和排序规则设置为 utf8 和 utf8_general_ci,数据库是通过读取 sql 脚本手动创建的。

现在我为其中一张带有丹麦特殊字符(如 æøå)的表格输入了一些值,但它们根本无法正确显示。

我的 parameters.yml 设置了编码:utf8,并且在我的 config.yml 中,学说配置具有:

doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8

当我在 mysql 控制台中进行选择时,字符显示正确,并且如果我尝试用 som 硬编码值替换控制器中的输出数组,那么问题似乎肯定源于某种错误/错误教义2配置...

有人知道如何解决这个问题吗?

非常感谢。

【问题讨论】:

【参考方案1】:

好吧,我终于弄明白了……这种配置有某种双重编码。注释掉 charset: UTF8 from dictionary dbal config 解决了这个问题。

【讨论】:

【参考方案2】:

问题可能出在您的应用程序字符集中。可以在config.yml中找到

framework:
  charset:         UTF-8
  #translator:       fallback: lt 
  #secret:          %secret%
  #other options

【讨论】:

谢谢,很遗憾不是这样。我得到一个运行时异常,指出此设置已被弃用,我应该向 AppKernel.php 添加一个 getCharset() 方法,返回“UTF8”。然而,这也不能解决它...... 如果你能添加你正在使用的 Symfony 和 Doctrine 版本,也许我可以提供更多帮助。 感谢 Laurynas 的努力。我发现问题出在哪里,我还不能接受我自己的答案,config.yml 中教义的 dbal 部分的字符集设置显然使数据的 utf8_encode 已经是 utf8(我的猜测),所以删除这个线解决了它。这应该在文档中以节省像我这样的傻瓜的麻烦;-)

以上是关于带有 Symfony2 的 Doctrine2 无法识别数据库字符集和排序规则的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 Doctrine2 获取所有表

在 Doctrine2/Symfony2 中的重复条目上插入忽略

Symfony2 / Doctrine2:不要在模式上删除全文索引:更新

如何在 Doctrine2 (Symfony2) 中按案例排序

Doctrine2 自定义类型不像主键 Symfony2 那样工作

Symfony2 和 Doctrine2 :用两个实体填充表单(一个复杂的场景)