2010-10-26 3 views
5

У нас есть требование хранить данные на разных языках в одной и той же схеме. Oracle 10g - наша БД. Я надеюсь, что кто-то, кто уже сделал это, даст мне более конкретные инструкции о том, как i18n включить oracle 10g db. Нам просто нужно хранить данные из нескольких локалей, а также сортировать (надеясь, что это будет поддержка всех основных db) на уровне db. Нам не нужно форматировать даты, дату и время, цифры, валюту и т. Д.Поддержка oracle и i18n

Я прочитал некоторую документацию по поддержке i18n оракула, но несколько смущен их многочисленными свойствами nls_ *. Должен ли я использовать nls_lang или nls_language или NLS_CHARACTERSET .....

ответ

6

Предполагая, что вы строите базу данных с нуля, не пытаясь модифицировать существующую базу данных, которая вводит другие проблемы.

В базе данных вам необходимо убедиться, что набор символов базы данных поддерживает все символы, которые вы хотите сохранить. Предположительно, это означает установку NLS_CHARACTERSET базы данных в AL32UTF8. Лично я предпочитаю также устанавливать NLS_LENGTH_SEMANTICS в CHAR. Это изменяет поведение по умолчанию VARCHAR2 (n) для распределения n символов хранения, а не n байтов. Поскольку AL32UTF8 представляет собой набор символов переменной длины, использование семантики байтов обычно проблематично, потому что вы либо должны объявлять поля, которые в 3 раза длиннее, и в конечном итоге разные пользователи могут вводить различное количество символов в одном поле.

NLS_LANG - это настройка клиента. Это идентифицирует набор символов, который клиент будет запрашивать для преобразования данных. Обычно это зависит от кодовой страницы операционной системы.

+0

THX для четкого ответа. в чем смысл AL32UF8. это отличается от UTF8? –

+1

AL32UTF8 - UTF8 ver. 3.1 – walla

+0

спасибо. Немного больше деталей можно найти по адресу http://oracleappstechnology.blogspot.com/2007/10/difference-between-utf8-and-al32utf8.html –

Смежные вопросы