2011-02-09 24 views
7

Tôi có bảng ngoài đọc từ một tệp có độ dài cố định. Tệp được mong đợi chứa các ký tự đặc biệt. Trong trường hợp của tôi, từ chứa ký tự đặc biệt là "Göteborg". Bởi vì "ö" là một nhân vật đặc biệt, có vẻ như Oracle đang xem nó là 2 byte. Điều đó gây ra rắc rối. Các trường tiếp theo trong các tập tin được chuyển bởi 1 byte do đó làm rối tung dữ liệu. Có ai phải đối mặt với vấn đề này trước đây không. Cho đến nay chúng tôi đã thử các giải pháp sau đây:Xử lý các ký tự UTF-8 trong các bảng bên ngoài Oracle

Thay đổi giá trị của NLS_LANG để AMERICAN_AMERICA.WE8ISO8859P1
cố gắng thiết lập cơ sở dữ liệu nhân vật thiết lập để UTF-8
Cố gắng thay đổi NLS_LENGTH_SYMMANTIC để char thay vì BYTE sử dụng ALTER SYSTEM
Đã thay đổi ký tự bảng bên ngoài thành: AL32UTF8
Đã cố gắng thay đổi ký tự bảng bên ngoài thành: UTF-8

Không có gì hoạt động. chi tiết khác bao gồm:

  • File là UTF-8 mã hóa
  • Hệ điều hành: RHEL
  • Cơ sở dữ liệu: Oracle 11g

Bất kỳ điều gì khác mà tôi có thể thiếu? Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn!

Trả lời

8

Chỉ nls_length_semantics liên quan đến việc tạo các bảng mới.

Dưới đây là những gì tôi đã làm để khắc phục vấn đề này.

records delimited by newline 
    CHARACTERSET AL32UTF8 
    STRING SIZES ARE IN CHARACTERS 

ví dụ:

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 
/
+0

Cảm ơn bạn! Giải quyết vấn đề của tôi ở đây. –

Các vấn đề liên quan