2012-01-11 140 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