Oracle par ordre différent
-
27-10-2019 - |
Question
J'ai une table dans une base de données Oracle comme ceci
ID | LABEL
------------
1 | label alpha 1
2 | label alpha 2
3 | label alpha a
quand je fais un select dans une application comme écureuil comme ceci:
select * FROM MA_TABLE order by LABEL asc
J'obtenir:
ID | LABEL
------------
1 | label alpha 1
2 | label alpha 2
3 | label alpha a
ce qui est bien!
Quand je Faire la même demande à l'aide mybatis:
<select id="selectMaTable" resultMap="resultMap" >
Select * FROM MA_TABLE order by LABEL asc
</select>
J'obtenir:
ID | LABEL
------------
3 | label alpha a
1 | label alpha 1
2 | label alpha 2
Les caractères alphabétiques sont avant que les caractères numériques ... pourquoi ??
Merci d'avance,
Antoine
Ps: J'utilise org.mybatis: mybatis: jar: 3.0.5 et com.oracle:ojdbc6:jar:11.2.0.2.0 pour l'accès base de données
Edit: cette aide liée moi un peu aussi
Merci à la remarque de Soulcheck, je trouve que si je change l'ordre par la clause ORDER BY avec NLSSORT (ATL_SIT.ATL_SIT_LIB, 'NLS_SORT = BINARY'), il fonctionne ...
Est-ce que quelqu'un sait comment forcer NLS_SORT = BINARY mybatis? (Il est déjà défini sur ma base de données Oracle dans NLS_DATABASE_PARAMETERS)
La solution
On dirait qu'il pourrait être une question locale. Se connecter avec écureuil et vérifier ce que NLS_LANG
il définit, puis vérifiez votre utilisation que soit la langue application java. Un autre paramètre qui peut influencer est un peu NLS_SORT
.
Vous pouvez vérifier la valeur à la fois par l'émission:
select parameter,value from NLS_DATABASE_PARAMETERS where parameter in('NLS_LANGUAGE','NLS_SORT');
Ensuite, vous pouvez le tester en Java en utilisant:
Locale.getDefault()
et mettez-le à l'aide:
Locale.setDefault(Locale)
ou en ajoutant des paramètres JVM:
-Duser.country=en -Duser.language=en
modifier
forums de printemps recommande la création d'un déclencheur de connexion qui définit la variable d'environnement NLS_SORT ouverture de session utilisateur. Ce ne sont pas mybatis, mais de toute façon jdbc devrait donc fonctionner dans votre cas.