【问题标题】:Doctrine - Order by utf-8 collationDoctrine - 按 utf-8 排序规则排序
【发布时间】:2019-08-27 20:45:07
【问题描述】:

主题:教义排序。

我想订购汽车品牌,当我想订购以Š、Đ、Ć、Č或Ž等字符开头的品牌时出现问题。例如,当我使用学说 orderBy 函数时,我的结果是这样的:
座椅
斯柯达
铃木。
请注意,Škoda 的排序方式就像它以 S 开头而不是 Š 开头一样。

成功的结果:

如何根据塞尔维亚拉丁字母对数据进行排序,以便得到以下结果:
座椅
铃木
斯柯达

Škoda 会在 Suzuki 之后出现,因为 Suzuki 是最后一个以 S 开头的,Škoda 是第一个以 Š 开头的,在塞尔维亚拉丁字母表中 Š 之后也是 S)。

或者,如果这不可能,是否还有其他解决方案在订购时不会混合数据(Š 不与 S 混合,Č 不与 C 混合,Ć 不与 C 混合等等)
任何帮助将不胜感激。

【问题讨论】:

    标签: php symfony doctrine-orm doctrine doctrine-query


    【解决方案1】:

    尝试更改数据库排序规则。也许试试 utf8_bin 因为在 utf8_general_ci Š 和 S 将是相同的

    【讨论】:

    • 这在删除我的表后起作用了,因为当使用命令教义:模式:更新时,教义不想做出改变。谢谢!
    【解决方案2】:

    您可以通过在您的实体中使用 options annotation 来更改特定列的排序规则(有关数据库支持,请参阅文档):

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

    这将改变您的数据库,因此您必须创建迁移或更新架构。

    【讨论】:

    • 感谢您的回答,我用上面的回答解决了我的问题。
    猜你喜欢
    • 2012-09-14
    • 2011-12-08
    • 2021-02-16
    • 2012-09-11
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多