2017-04-06 115 views
0

我遇到了以下問題:從.csv文件加載時,數據快速加載到Teradata Table導致Â出現在特殊字符前面。Teradata在特殊字符前添加Â

CSV文件

1 |您好,£5.00已經從您的賬戶中扣除,感謝您的付款|。XXXX | XX | XXXX-XXX-XXX

Teradata表

1 |你好,£5.00已經從您的賬戶中扣除,感謝您的付款|。XXXX | XX | XXXX-XXX-XXX

表防守從頭

CREATE MULTISET TABLE DATABASE1.TABLE1 ,NO FALLBACK , 
NO BEFORE JOURNAL, 
NO AFTER JOURNAL, 
CHECKSUM = DEFAULT, 
DEFAULT MERGEBLOCKRATIO 
(
    FIELD1 VARCHAR(25) CHARACTER SET LATIN NOT CASESPECIFIC, 
    FIELD2 VARCHAR(750) CHARACTER SET LATIN NOT CASESPECIFIC, 
    FIELD3 VARCHAR(35) CHARACTER SET LATIN NOT CASESPECIFIC, 
    FIELD4 VARCHAR(35) CHARACTER SET LATIN NOT CASESPECIFIC, 
    FIELD5 VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC 
) PRIMARY INDEX (FIELD1); 

Fastload代碼

fastload <<-EOF 
    .LOGON username/pass; 
    DATABASE DATABASE1; 

     SET RECORD VARTEXT "|"; 

     BEGIN LOADING TABLE1 
      ERRORFILES TABLE1_ERR1, 
         TABLE1_ERR2; 

     DEFINE 
      FIELD1  (VARCHAR(25)) 
      FIELD2  (VARCHAR(750)) 
      FIELD3  (VARCHAR(35)) 
      FIELD4  (VARCHAR(35)) 
      FIELD5  (VARCHAR(50)) 


     FILE=${LOAD_FILE}; 

     SHOW; 

     INSERT INTO DATABASE1.TABLE1 
     (
      FIELD1 , 
      FIELD2 , 
      FIELD3 , 
      FIELD4 , 
      FIELD5 

     ) 
     VALUES 
     (
      :FIELD1 , 
      :FIELD2 , 
      :FIELD3 , 
      :FIELD4 , 
      :FIELD5 
     ); 

    .END LOADING; 
    .LOGOFF; 
    .QUIT; 
EOF 

有誰知道如何解決這個問題,我是從的Solaris 10 Fastload實用程序運行此v12.00.00.011

+0

您可能使用錯誤的字符集來裝載。順便說一句,12是veeeery舊版本。 – dnoeth

+0

告訴我有關它!不幸的是不能改變它 – Charabon

+0

嘗試轉換CSV文件的字符集?看到這個鏈接轉換選項http://stackoverflow.com/questions/64860/best-way-to-convert-text-files-between-character-sets – xenodevil

回答

0

默認字符集fastload是ANSII,£是UTF8,解決方法是在fastload函數中更改會話字符集。

fastload <<-EOF 
    SET SESSION CHARSET 'UTF8'; 
    .LOGON username/pass; 
    DATABASE DATABASE1; 

    SET RECORD VARTEXT "|"; 

    BEGIN LOADING TABLE1 
     ERRORFILES TABLE1_ERR1, 
        TABLE1_ERR2; 

    DEFINE 
     FIELD1  (VARCHAR(25)) 
     FIELD2  (VARCHAR(750)) 
     FIELD3  (VARCHAR(35)) 
     FIELD4  (VARCHAR(35)) 
     FIELD5  (VARCHAR(50)) 


    FILE=${LOAD_FILE}; 

    SHOW; 

    INSERT INTO DATABASE1.TABLE1 
    (
     FIELD1 , 
     FIELD2 , 
     FIELD3 , 
     FIELD4 , 
     FIELD5 

    ) 
    VALUES 
    (
     :FIELD1 , 
     :FIELD2 , 
     :FIELD3 , 
     :FIELD4 , 
     :FIELD5 
    ); 

.END LOADING; 
.LOGOFF; 
.QUIT; 
EOF