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

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

多位元組字元載入錯誤

具有 CHAR 資料類型的資料欄僅接受單位元組 UTF-8 字元,最高為位元組值 127,或 7F hex,它也是 ASCII 字元集。VARCHAR 資料欄接受多位元組 UTF-8 字元,最長四個位元組。如需詳細資訊,請參閱 字元類型

如果您的載入資料中的資料行包含對資料欄資料類型無效的字元,COPY 會傳回錯誤並將資料列記錄在 STL_LOAD_ERRORS 系統日誌資料表,錯誤碼 1220。ERR_REASON 欄位包括無效字元的位元組序列 (十六進位)。

修正您的載入資料中無效字元的一個替代方式是在載入程序期間取代無效的字元。若要取代無效的 UTF-8 字元,請指定 ACCEPTINVCHARS 選項搭配 COPY 命令。如果設定了 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 嘗試將 UTF-8 a4 載入 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 位元組序列沒有相符的字碼指標。