Мы создали триггер «после входа», чтобы изменить сеанс, чтобы установить две настройки NLS - NLS_SORT и NLS_COMP. NLS_SORT должен быть установлен в BINARY_CI, а NLS_COMP должен быть в LINGUISTIC. Запрашивая представление V $ NLS_PARAMETERS после установления соединения для проверки значений, я вижу, что параметр NLS_COMP обновляется, а NLS_SORT - нет.
После более подробного изучения я понял, что драйвер OCI JDBC выполняет приведенный ниже запрос после установления соединения
ALTER SESSION SET NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA'
Поскольку NLS_SORT получает свои значения из NLS_LANGUAGE, значение параметра NLS_SORT сбрасывается в BINARY вместо BINARY_CI. Параметр NLS_LANGUAGE берется из реестра Windows.
Выполняет ли драйвер oci jdbc эти запросы для синхронизации настроек NLS на клиенте с настройками сервера базы данных?
Можно ли настроить драйвер jdbc oci, чтобы избежать выполнения запроса NLS_LANGUAGE изменения набора сеанса?
Причина, по которой я задаю второй вопрос, заключается в том, что для сервера приложений (например, glassfish, tomcat, jboss) (на котором установлен клиент OCI) не имеет смысла переопределять настройки сервера базы данных.