Oracle Order от разных
-
27-10-2019 - |
Вопрос
У меня есть таблица в таком базе данных 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:jar:11.2.0.2.0 Для доступа к базе данных
Редактировать :Это связано и немного помогите мне немного
Благодаря замечанию Soulcheck, я обнаружил, что если я изменю предложение «Заказ по заказу» nlssort (atl_sit.atl_sit_lib, 'nls_sort = binary') Это работает ...
Кто -нибудь знает, как заставить nls_sort = двоичный с помощью mybatis? (Он уже установлен в моей базе данных Oracle в NLS_DATABASE_PARAMETERS)
Решение
Похоже, это может быть проблемой локали. Подключитесь со белкой и проверьте, что 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
редактировать
Весенние форумы Рекомендую создать триггер для входа в систему, который устанавливает переменную среды NLS_SORT на вход в систему пользователя. Это не Mybatis, но JDBC в любом случае, так что должен работать в вашем случае.