Oracle Order por diferente
-
27-10-2019 - |
Pregunta
Tengo una tabla en una base de datos Oracle como esta
ID | LABEL
------------
1 | label alpha 1
2 | label alpha 2
3 | label alpha a
Cuando hago una selección en una aplicación como Squirrel como esta:
select * FROM MA_TABLE order by LABEL asc
Yo obtengo :
ID | LABEL
------------
1 | label alpha 1
2 | label alpha 2
3 | label alpha a
lo cual está bien !
Pero cuando ejecuto la misma solicitud usando MyBatis:
<select id="selectMaTable" resultMap="resultMap" >
Select * FROM MA_TABLE order by LABEL asc
</select>
Yo obtengo :
ID | LABEL
------------
3 | label alpha a
1 | label alpha 1
2 | label alpha 2
Los personajes alfabéticos vienen ante los personajes numéricos ... ¿por qué?
gracias de antemano,
Antoine
PD: Estoy usando org.mybatis: mybatis: jar: 3.0.5 y com.oracle:ojdbc6:jar:11.2.0.2.0 para el acceso a la base de datos
Editar :esto vinculado me ayuda un poco también
Gracias al comentario de SoulCheck, descubrí que si cambio el orden por cláusula con orden por nlssort (atl_sit.atl_sit_lib, 'nls_sort = binary') funciona ...
¿Alguien sabe cómo forzar nls_sort = binary con mybatis? (Ya está configurado en mi base de datos Oracle en NLS_DATABASE_PARAMETERS)
Solución
Parece que podría ser un problema local. Conéctese con Squirrel y verifique qué NLS_LANG
Establece, luego verifique qué lugar utiliza su aplicación Java. Otro parámetro que puede influir en la clasificación es NLS_SORT
.
Puede verificar el valor de ambos emitiendo:
select parameter,value from NLS_DATABASE_PARAMETERS where parameter in('NLS_LANGUAGE','NLS_SORT');
Entonces puedes probarlo en Java usando:
Locale.getDefault()
y establecerlo usando:
Locale.setDefault(Locale)
o agregando parámetros JVM:
-Duser.country=en -Duser.language=en
editar
Foros de primavera Recomendar crear un disparador de inicio de sesión que establezca la variable ambiental NLS_SORT en el inicio de sesión del usuario. No es mybatis, sino JDBC de todos modos, por lo que debería funcionar en su caso.