Oracle Order von verschiedenen
-
27-10-2019 - |
Frage
Ich habe eine Tabelle in einer Oracle -Datenbank wie dieser
ID | LABEL
------------
1 | label alpha 1
2 | label alpha 2
3 | label alpha a
Wenn ich eine Auswahl in einer Anwendung wie Eichhörnchen wie folgt mache:
select * FROM MA_TABLE order by LABEL asc
Ich bekomme :
ID | LABEL
------------
1 | label alpha 1
2 | label alpha 2
3 | label alpha a
Was ist in Ordnung!
Aber wenn ich die gleiche Anfrage mit MyBatis ausführe:
<select id="selectMaTable" resultMap="resultMap" >
Select * FROM MA_TABLE order by LABEL asc
</select>
Ich bekomme :
ID | LABEL
------------
3 | label alpha a
1 | label alpha 1
2 | label alpha 2
Die alphabetischen Charaktere kommen vor den numerischen Charakteren ... warum?
vielen Dank im Voraus,
Antoine
PS: Ich verwende org.mybatis: mybatis: jar: 3.0.5 und com.oracle:ojdbc6:jar:11.2.0.2.0 für den Datenbankzugriff
Bearbeiten :Diese verknüpfte helfen mir auch ein bisschen
Dank der Bemerkung von Soulcheck habe ich festgestellt, dass wenn ich die Reihenfolge nach Klausel mit Order by NLSSORT (atl_sit.atl_sit_lib, 'nls_sort = binary') ändere, funktioniert ...
Weiß jemand, wie man nls_sort = binär mit mybatis zwingt? (Es ist bereits in meiner Oracle -Datenbank in nls_database_parameters festgelegt)
Lösung
Es sieht so aus, als wäre es ein Gebietsschema -Problem. Verbinden Sie sich mit Eichhörnchen und überprüfen Sie was NLS_LANG
Es setzt und prüft dann, welches Gebietsschema Ihre Java -App verwendet. Ein weiterer Parameter, der die Sortierung beeinflussen kann, ist NLS_SORT
.
Sie können den Wert von beidem überprüfen, indem Sie ausgeben:
select parameter,value from NLS_DATABASE_PARAMETERS where parameter in('NLS_LANGUAGE','NLS_SORT');
Dann können Sie es in Java testen, indem Sie:
Locale.getDefault()
und setzen Sie es mit: Verwenden:
Locale.setDefault(Locale)
oder durch Hinzufügen von JVM -Parametern:
-Duser.country=en -Duser.language=en
bearbeiten
Frühlingsforen Empfehlen Sie ein Anmeldeauslöser, der NLS_SORT -Umgebungsvariable auf Benutzeranmeldungen festlegt. Es ist nicht mybatis, aber JDBC sollte trotzdem in Ihrem Fall funktionieren.