我在这样的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)
答案 0 :(得分:3)
看起来它可能是一个区域设置问题。与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无论如何应该适合你的情况。