У нас есть две базы данных Oracle, которые настроены на:
SQL> SELECT USERENV ('language') FROM DUAL;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
Остальные наши экземпляры настроены следующим образом:
SQL> SELECT USERENV ('language') FROM DUAL;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.WE8ISO8859P1
Это создает всевозможные проблемы при передаче данных из одной базы данных в другую. Можно ли преобразовать две «нестандартные» базы данных в соответствие с другими. Если да, то как?
ну, первый набор символов - это Unicode, который в основном поддерживает все языки. Второй («P1») - западноевропейский ASCII, поддерживающий английские и некоторые дополнительные западные символы.
Так,
Преобразование из WE8 ... P1 в Unicode может быть легко выполнено путем экспорта (установка NLS_LANG на WE8..P1), создания новой пустой базы данных и импорта (опять же, путем установки NLS_LANG на WE8..P1). Однако преобразование в Unicode имеет некоторые побочные эффекты, особенно в отношении ограничений любых столбцов varchar2 - если это был varchar2 (20), это обычно означает 20 байтов, поэтому при использовании Unicode 20 байтов могут содержать меньше (не английских) символов. . Итак, чтобы избежать усечения данных, некоторые столбцы, возможно, придется увеличить ... Все подробности здесь:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28298/ch11charsetmig.htm
Преобразование из UTF8 в WE8..P1 - это снова экспорт с NLS_LANG = WE8 ... P1 (теперь вы потеряете все символы, которые не отображаются в P1 ASCII, например арабский, китайский и т. Д.), Создав пустой We8 .. База данных P1 и импорт данных с NLS_LANG = WE8ISO8859P1.