【问题标题】:Oracle order by differentOracle order by 不同
【发布时间】:2012-01-11 11:07:34
【问题描述】:

我在这样的 Oracle 数据库中有一个表

ID   | LABEL
------------
 1   |  label alpha 1
 2   |  label alpha 2
 3   |  label alpha a

当我在像 Squirrel 这样的应用程序中进行选择时:

select * FROM MA_TABLE order by LABEL asc

我明白了:

ID   | LABEL
------------
 1   |  label alpha 1
 2   |  label alpha 2
 3   |  label alpha a

这很好!

但是当我使用 MyBatis 执行相同的请求时:

<select id="selectMaTable" resultMap="resultMap" >
  Select * FROM MA_TABLE order by LABEL asc
</select>

我明白了:

ID   | LABEL
------------
 3   |  label alpha a
 1   |  label alpha 1
 2   |  label alpha 2

字母字符在数字字符之前...为什么??

提前致谢,

安东尼

Ps : 我正在使用 org.mybatis:mybatis:jar:3.0.5 和 com.oracle:ojdbc6:jar:11.2.0.2.0 进行数据库访问

编辑: this linked help me a bit also

感谢 Soulcheck 的评论,我发现如果我使用 ORDER BY NLSSORT(ATL_SIT.ATL_SIT_LIB, 'NLS_SORT=BINARY') 更改 order by 子句,它可以工作...

有谁知道如何用 myBatis 强制 NLS_SORT=BINARY ? (它已经在我的 Oracle 数据库的 NLS_DATABASE_PARAMETERS 中设置)

【问题讨论】:

    标签: java oracle sorting sql-order-by mybatis


    【解决方案1】:

    看起来可能是语言环境问题。与 squirrel 连接并检查它设置的 NLS_LANG,然后检查使用您的 java 应用程序的语言环境。另一个可以影响排序的参数是NLS_SORT

    您可以通过发出以下命令检查两者的值:

    select parameter,value from NLS_DATABASE_PARAMETERS where parameter in('NLS_LANGUAGE','NLS_SORT');
    

    然后你可以在java中使用:

    Locale.getDefault()
    

    并通过使用设置它:

    Locale.setDefault(Locale)
    

    或者通过添加jvm参数:

    -Duser.country=en -Duser.language=en
    

    编辑

    spring forums 建议创建一个登录触发器,在用户登录时设置 NLS_SORT 环境变量。这不是 MyBatis,但 jdbc 无论如何都应该适用于您的情况。

    【讨论】:

    • 这似乎是一个很好的猜测,谢谢!但我的 NLS_LANGUAGE 是 'AMERICAN' 而我的 'NLS_SORT' 是 'BINARY'。尽管如此,我还是尝试更改 java 程序中的语言环境(FR、EN、...),但结果仍然相同...还有其他想法吗?
    • 使用 ORDER BY NLSSORT(LABEL, 'NLS_SORT=BINARY') 更改 ORDER BY 语句使其工作!但我不想根据我的程序的请求更改每个订单......也许有人知道一些有助于改变它的 MyBatis 参数??
    • 谢谢!我现在将使用此解决方案。但我仍在尝试在 spring 中使用数据源参数找到另一种方法。如果我发现任何其他内容,我会在这里发布
    猜你喜欢
    • 2022-01-03
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多