#oracle #oracle10g #globalization
#Oracle #oracle10g #глобализация
Вопрос:
Я использую oracle 10g.Набор символов для DB выглядит следующим образом: NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_CHARACTERSET AL32UTF8.
У меня есть символ ® (обведенный «R»), входящий в текстовый файл в одном из полей, и когда тот же файл загружается во внешнюю таблицу, символ преобразуется в ‘?’.
Пожалуйста, предложите.
Комментарии:
1. Можете ли вы предоставить определение внешней таблицы?
2. Тип данных для этого столбца — nvarchar2(500 байт).
CREATE TABLE "APP_XXX_XX_XXXX"( "product_name" NVARCHAR2(500 byte) "XXX_XXX_XXXXX" VARCHAR2(1 byte), "XXX_XXX_XXXXX" NUMBER(9), "XXX_XXX_XXXXX" NUMBER(4), "XXX_XXX_XXXXX" NUMBER(2), "XXX_XXX_XXXXX" NUMBER(3)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY "DIR" ACCESS PARAMETERS ( RECORDS DELIMITED BY '~^' CHARACTERSET 'AL32UTF8' LOGFILE APP_XXX_XX_XXXX_%A_%P.LOG' BADFILE 'APP_XXX_XX_XXXX_%A_%P.BAD' DISCARDFILE 'APP_XXX_XX_XXXX_%A_%P.DSC' LOCATION ( 'FILE1.TXT') ) REJECT LIMIT UNLIMITED
3. Пользователь NVARCHAR вместо VARCHAR2 и использует CHAR вместо byte, например:
VARCHAR2(1 BYTE)
становитсяNVARCHAR2(1 CHAR)
4. Я пытался использовать следующее определение, но все еще существует та же проблема:-
CREATE TABLE @@@@ ( PRD_TITLE NVARCHAR2(400) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY PROD_EXT_TAB ACCESS PARAMETERS ( RECORDS DELIMITED BY '~^' CHARACTERSET AL32UTF8 LOGFILE ext_log:'@@@@.log' BADFILE ext_log:'@@@@.bad' DISCARDFILE ext_log:'@@@@.dsc' FIELDS TERMINATED BY '_^' OPTIONALLY ENCLOSED BY '"' MISSING FIELD VALUES ARE NULL REJECT ROWS WITH ALL NULL FIELDS ( prd_title ) ) LOCATION (PROD_EXT_TAB:'@@@@.txt') ) REJECT LIMIT UNLIMITED NOPARALLEL
Ответ №1:
Где вы видите, что ® преобразуется в вопросительный знак? Возможно, проблема в кодировке того, что вы используете для просмотра таблицы, а не в самой таблице. Я бы также проверил, что вы используете для загрузки базы данных. UTF8 должен поддерживать символ.
Комментарии:
1. Я вижу ? в Toad. Это не проблема с кодировкой, поскольку я уже установил кодировку toad в UTF-8, и .txt также кодируется в utf-8. Я использую внешнюю таблицу для чтения файла .txt с символом ®. Теперь, когда я вижу это через внешнюю таблицу, я получаю ? в таблице.