多字节字符加载错误 - 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 尝试将 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 字节序列没有匹配的码位。