Обработка символов UTF-8 во внешних таблицах Oracle - PullRequest
9 голосов
/ 09 февраля 2011

У меня есть внешняя таблица, которая читает из файла фиксированной длины. Предполагается, что файл будет содержать специальные символы. В моем случае слово, содержащее специальный символ, - «Гетеборг». Поскольку «ö» является специальным символом, похоже, что Oracle рассматривает его как 2 байта. Это вызывает проблемы. Последующие поля в файлах сдвигаются на 1 байт, что портит данные. Кто-нибудь сталкивался с проблемой раньше. Пока что мы попробовали следующее решение:

Изменено значение NLS_LANG на AMERICAN_AMERICA.WE8ISO8859P1
Попытка установки символа базы данных в UTF-8
Попытался изменить NLS_LENGTH_SYMMANTIC на CHAR вместо BYTE, используя ALTER SYSTEM
Попытался изменить набор символов внешней таблицы на: AL32UTF8
Попытался изменить набор символов внешней таблицы на: UTF-8

Ничего не работает. Другие детали включают в себя:

  • Файл в кодировке UTF-8
  • Операционная система: RHEL
  • База данных: Oracle 11g

Что-нибудь еще, что я мог бы пропустить? Любая помощь будет оценена. Спасибо!

1 Ответ

10 голосов
/ 22 февраля 2011

nls_length_semantics относится только к созданию новых таблиц.

Ниже описано, что я сделал для решения этой самой проблемы.

  records delimited by newline
  CHARACTERSET AL32UTF8
  STRING SIZES ARE IN CHARACTERS 

, т. Е.

ALTER SESSION SET nls_length_semantics = CHAR
/
CREATE TABLE TDW_OWNER.SDP_TST_EXT
(
    COST_CENTER_CODE VARCHAR2(10)     NULL,
    COST_CENTER_DESC VARCHAR2(40)     NULL,
    SOURCE_CLIENT    VARCHAR2(3)      NULL,
    NAME1            VARCHAR2(35)     NULL
)
ORGANIZATION EXTERNAL
 ( TYPE ORACLE_LOADER
   DEFAULT DIRECTORY DBA_DATA_DIR
   ACCESS PARAMETERS
    ( records delimited by newline
      CHARACTERSET AL32UTF8
      STRING SIZES ARE IN CHARACTERS 
        logfile DBA_DATA_DIR:'sdp_tst_ext_%p.log'
        badfile DBA_DATA_DIR:'sdp_tst_ext_%p.bad'
        discardfile DBA_DATA_DIR:'sdp_tst_ext_%p.dsc'
        fields
    notrim
       (
             COST_CENTER_CODE CHAR(10)
            ,COST_CENTER_DESC  CHAR(40)
            ,SOURCE_CLIENT  CHAR(3)
            ,NAME1  CHAR(35)
           )
    )
   LOCATION (DBA_DATA_DIR:'sdp_tst.dat')
 )
REJECT LIMIT UNLIMITED
NOPARALLEL
NOROWDEPENDENCIES
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...