2012-01-11 73 views
2

为了我有一个表在Oracle数据库这样甲骨文不同

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

当我做了选择像松鼠这样的应用程序:

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的:罐子:3.0.5和com.oracle:ojdbc6:jar:11.2.0.2.0数据库访问

编辑: this linked help me a bit also

由于Soulcheck此言,我发现,如果我通过子句ORDER改变ORDER BY NLSSORT(ATL_SIT.ATL_SIT_LIB, 'NLS_SORT = BINARY'),它的工作原理...

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

回答

3

看起来它可能是一个语言环境问题。连接松鼠,并检查它设置了什么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应该适用于你的情况。

+0

这似乎是一个很好的猜测,谢谢!但是我的NLS_LANGUAGE是'AMERICAN',我的'NLS_SORT'是'BINARY'。尽管如此,我试图改变java程序中的语言环境(FR,EN,...),但结果仍然是一样的......任何其他想法? – antoine 2012-01-11 15:58:29

+0

使用ORDER BY NLSSORT(LABEL,'NLS_SORT = BINARY')更改ORDER BY语句使它成功!但我不想通过我的程序的请求来改变每一个订单......也许有人知道一些MyBatis参数有助于改变? – antoine 2012-01-11 17:02:32

+0

@antoine查看我的编辑 – soulcheck 2012-01-11 17:25:07