Oracle ORDER BY неправильный порядок записей

Возникла такая странная проблема. Выполняю на Oracle Database какой-нибудь запрос с ORDER BY, например:

Если выполнять его через SQL Developer, то всё выполняется корректно. Но при выполнении этого запроса через JDBC из клиента Java  записи возвращаются в совершенно неправильном порядке.

После долгих рысканий по интернету нашёл причину проблемы. Она заключается в том, что JDBC берёт языковые настройки для сортировки из JVM. Проблема с неправильной сортировкой возникает при отличии языковых настроек в системе, на которой запускается Java-клиент, и установленных на другом компьютере в Oracle Database.

Узнать текущее значение языка для сортировки в Oracle можно с помощью SQL-команды:

Для исправления проблемы есть два более менее нормальных способа.

Способ 1.

Создать триггер, который будет устанавливать свойства сортировки и языка для сессии:

Способ 2.

Драйвер JDBC берёт настройки для сессии из java.util.Locale, поэтому мы можем установить локаль по умолчанию для JVM:

Либо с помощью параметров JVM:

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *