1

我正在尝试按字母顺序对以其本国语言编写的组织名称进行排序,这意味着它们可能包含重音或特定语言的字符。

我用 Oracle 用纯 sql 找到了解决方案

select org_name
from organisations
order by org_name COLLATE GENERIC_M;

它准确地返回了我想要的内容并按照我想要的方式进行了排序。

现在,当尝试使用 Oracle 对具有相同模式的 Doctrine 执行相同操作时,麻烦就来了。

当我使用查询生成器时,我不能只在查询中指定“COLLATE GENERIC_M”部分。

在查看了学说文档后,我在我的实体中尝试了像这样的“选项”属性注释

/**
     * @ORM\Column(type="string", length=255, name="org_name", options={"collation":"GENERIC_M"})
     */
    private $name;

这不起作用,因为显然 Doctrine 不支持 Oracle 供应商的此属性。

我还尝试在我的学说配置中指定如下:

 driver:       'oci8'
        service:      true
        user:         '%env(DATABASE_USER)%'
        password:     '%env(DATABASE_PASS)%'
        options:
                1002: "SET NAMES 'UTF8' COLLATE 'GENERIC_M'" 

但没有变化(当然在清除缓存之后)。

我想避免在架构级别更改设置,因为它是一个已经上线的项目,我不想引入副作用。我还想避免在这个简单的查询中使用普通的 sql,因为我使用了学说分页。

还有其他方法可以实现我的主要目标吗?

先感谢您

4

0 回答 0