質問

私はこのような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:jar:3.0.5およびcom.oracle:ojdbc6:11.2.0.2.0を使用しています。

編集 :これは私も少し助けてくれます

SoulCheckの発言のおかげで、NLSSORT(atl_sit.atl_sit_lib、 'nls_sort = binary')による注文で句ごとに注文を変更すると...

NLS_SORT =バイナリをMyBatisで強制する方法を知っている人はいますか? (nls_database_parametersの私のOracleデータベースにすでに設定されています)

役に立ちましたか?

解決

それはロケールの問題であるように見えます。リスとつながり、何を確認してください NLS_LANG 設定してから、Javaアプリを使用するLocaleを確認します。ソートに影響を与える可能性のある別のパラメーターは次のとおりです 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

編集

春のフォーラム ユーザーログオンにnls_sort環境変数を設定するログオントリガーの作成をお勧めします。それはmybatisではありませんが、とにかくJDBCなので、あなたの場合は機能するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top