Как я могу установить формат даты NLS без установки локали - PullRequest
2 голосов
/ 27 октября 2010

Наш класс java вызывает PLSQL proc, который возвращает дату в формате по умолчанию, который определяется NLS_DATE_FORMAT. Наше приложение устанавливает собственный язык для интернационализации, но я хочу, чтобы формат даты оставался просто «DD-MON-RR», то есть en_US Locale NLS_DATE_FORMAT. Из-за изменения в локали извлекаемая строка даты оракула отличается, и последующие вызовы функции TO_DATE () завершаются неудачно. Я попытался исправить это, изменив Locale to Locale.setDefault(new Locale("en","US")); //"en_US" в java-классе, и он работает нормально, но часть интернационализации больше не будет работать. Я нахожусь в Сингапуре, поэтому моя локаль - "en_SG", а формат даты, который оракул принимает после установки NLS_TERRITORY: SINGAPORE, - NLS_DATE_FORMAT:'DD/MM/RR'. Я запрашиваю у сервера V $ NLS_PARAMETERS и там по умолчанию используется формат даты «DD-MON-RR». Итак, мой вопрос, могу ли я установить NLS_DATE_FORMAT, не влияя на настройки языка приложения. Или я могу заставить драйвер jdbc полностью игнорировать настройки NLS клиента?

Ответы [ 2 ]

3 голосов
/ 27 октября 2010

Yo может использовать функцию to_char для форматирования даты, как вы хотите, также вы можете включить третий параметр в функцию to_char для обозначения используемой локали:

select to_char(sysdate, 'DY-MM-YYYY', 'NLS_DATE_LANGUAGE=AMERICAN')  from dual;

Более подробная информация о форматах даты можетможно найти в Справочник по SQL .

0 голосов
/ 27 октября 2010

Я заканчиваю работу над i18n для моего приложения, и мой дизайн основан на следующих предположениях)

1) Locale.setDefault (новый Locale ("en", "US")); плохо, так как вы меняете локаль по умолчанию для JVM, а не только для своего приложения. Поэтому лучше передавать локаль вокруг приложения для каждого запроса (может быть локальным)

2) Обрабатывать все форматирование / синтаксический анализ i18n на уровне приложения. БД должна обрабатывать только сравнения (опционально), сортировку (опционально) и хранение. Так что просто установите NLS_CHARACTERSET, NLS_COMP, NLS_SORT и NLS_LENGTH_SEMANTICS. Кстати, сравнение и сортировка на уровне базы данных означает создание индексов, специфичных для локали, что замедляет вставки / обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...