多位元組字元載入錯誤 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

多位元組字元載入錯誤

具有CHAR數據類型的列僅接受單字節 UTF -8 個字符,最多字節值 127 或 7F 十六進制,也是ASCII字符集。VARCHAR列接受多字節 UTF -8 個字符,最多四個字節。如需詳細資訊,請參閱字元類型

如果載入資料中的某一行包含對資料行資料類型無效的字元,會COPY傳回錯誤並在 STL _ LOAD _ ERRORS 系統記錄資料表中記錄一列,錯誤編號為 1220。ERR_ REASON 欄位包含無效字元的位元組序列 (以十六進位表示)。

修正您的載入資料中無效字元的一個替代方式是在載入程序期間取代無效的字元。若要取代無效的 UTF -8 個字元,請使用指COPY令指定ACCEPTINVCHARS選項。如果設定了ACCEPTINVCHARS選項,則您指定的字元會取代代碼點。如果未設置該ACCEPTINVCHARS選項,Amazon Redshift 將接受這些字符為有效 UTF -8。如需詳細資訊,請參閱ACCEPTINVCHARS

下面的代碼點列表是有效的 UTF -8,如果未設置該ACCEPTINVCHARS選項,COPY操作不返回錯誤。但是,這些字碼指標不是有效的字元。您可以使用 ACCEPTINVCHARS 選項,以您指定的字元取代字碼指標。這些字碼指標包括範圍從 0xFDD00xFDEF 的值和最多到 0x10FFFF 的值,並且以 FFFEFFFF 結尾:

  • 0xFFFE, 0x1FFFE, 0x2FFFE, …, 0xFFFFE, 0x10FFFE

  • 0xFFFF, 0x1FFFF, 0x2FFFF, …, 0xFFFFF, 0x10FFFF

下列範例顯示COPY嘗試將 UTF -8 個字元載e0 a1 c7a4入CHAR資料行時的錯誤原因。

Multibyte character not supported for CHAR (Hint: Try using VARCHAR). Invalid char: e0 a1 c7a4

如果錯誤與VARCHAR資料類型相關,則錯誤原因會包含錯誤碼以及無效的 UTF -8 個十六進位序列。下列範例顯示COPY嘗試a4將 UTF -8 載入VARCHAR欄位時的錯誤原因。

String contains invalid or unsupported UTF-8 codepoints. Bad UTF-8 hex sequence: a4 (error 3)

下表列出VARCHAR載入錯誤的說明和建議的因應措施。如果發生上述其中一個錯誤,請以有效的 UTF -8 個字碼序列取代字元,或移除該字元。

錯誤代碼 描述
1 UTF-8 位元組序列超過支援的四位元組最大值。VARCHAR
2 UTF-8 字節序列不完整。COPY在字串結尾之前,找不到多位元組字元的預期續續位元組數。
3 UTF-8 個單位元組字元超出範圍。開始位元組不得為 254、255 或介於 128 和 191 (含) 之間的任何字元。
4 位元組序列中結尾位元組的值超出範圍。持續位元組必須介於 128 和 191 (含) 之間。
5 UTF-8 個字符被保留為代理。代理代碼點(U+D800 通過 U+DFFF)無效。
8 位元組序列超過最大 UTF -8 個字碼點。
9 UTF-8 字節序列沒有匹配的代碼點。