Php Symfony 2/Oracle Querybuilder结果区分大小写

Php Symfony 2/Oracle Querybuilder结果区分大小写,php,oracle,symfony,doctrine-orm,query-builder,Php,Oracle,Symfony,Doctrine Orm,Query Builder,我在Symfony 2中有一个查询结果的奇怪行为。 我在Oracle数据库中有这样的数据,顺序如下: BU 4 2015 bU 2 BUC BUS BU 4 2014 注意,第二个数据中的小写字母 我只想按字母顺序显示此列表,不需要任何区分大小写的支持。 想要的结果是: - BU C - bU 2 - BU 4 2014 - BU 4 2015 - BU S 下面是使用Symfony 2.5.12制作的Querybuilder: $queryBuilder = $this->creat

我在Symfony 2中有一个查询结果的奇怪行为。 我在Oracle数据库中有这样的数据,顺序如下:

  • BU 4 2015
  • bU 2
  • BUC
  • BUS
  • BU 4 2014
  • 注意,第二个数据中的小写字母

    我只想按字母顺序显示此列表,不需要任何区分大小写的支持。 想要的结果是:

    - BU C
    - bU 2
    - BU 4 2014
    - BU 4 2015
    - BU S
    
    下面是使用Symfony 2.5.12制作的Querybuilder:

     $queryBuilder = $this->createQueryBuilder('e');
     $queryBuilder->orderBy('e.name');
    
    但在查询中,按以下顺序显示我的列表:

    - BU C
    - BU 4 2014
    - BU 4 2015
    - BU S
    - bU 2
    
    • 当我在Oracle数据库客户端中播放symfony 2 profiler中显示的查询时,我得到了想要的结果

    • 当我转储查询生成器结果时,我得到了错误的顺序列表

    我设法用这个解决了我的问题

    $queryBuilder = $this->createQueryBuilder('e');
    $queryBuilder
        ->select(e)
        ->addSelect('UPPER(e.name) as HIDDEN name')
        ->orderBy('name');
    
    我只是想知道为什么我在querybuilder上会有这种奇怪的行为

    谢谢。

    首先,你的“想要的结果”实际上不是按字母顺序排列的。不区分大小写的排序将产生以下顺序:

    bU 2
    BU 4 2014
    BU 4 2015
    BU C
    BU S
    
    其次,使用Oracle SQL进行不区分大小写排序的方法是在要排序的列上使用
    UPPER()
    LOWER()
    ,如下所示:

    SELECT *
    FROM e
    ORDER BY UPPER(e.name);
    
    最后,使用Doctrine QueryBuilder进行不区分大小写排序的方法就是这样做的:添加
    UPPER(e.name)作为隐藏名称,然后按该字段进行排序

    在本例中,QueryBuilder没有奇怪的行为。

    首先,您的“想要的结果”实际上不是按字母顺序排列的。不区分大小写的排序将产生以下顺序:

    bU 2
    BU 4 2014
    BU 4 2015
    BU C
    BU S
    
    其次,使用Oracle SQL进行不区分大小写排序的方法是在要排序的列上使用
    UPPER()
    LOWER()
    ,如下所示:

    SELECT *
    FROM e
    ORDER BY UPPER(e.name);
    
    最后,使用Doctrine QueryBuilder进行不区分大小写排序的方法就是这样做的:添加
    UPPER(e.name)作为隐藏名称,然后按该字段进行排序


    在本例中,QueryBuilder没有奇怪的行为。

    不太了解Oracle,但可能是排序规则有问题。不太了解Oracle,但可能是排序规则有问题。