我们在 S3 中有一个文件,它通过COPY
命令加载到 Redshift。导入失败,因为一个VARCHAR(20)
值包含一个在复制命令期间Ä
被翻译的值..
,现在对于 20 个字符来说太长了。
我已经验证了 S3 中的数据是正确的,但是COPY
在导入过程中命令不理解 UTF-8 字符。有没有人找到解决方案?
我们在 S3 中有一个文件,它通过COPY
命令加载到 Redshift。导入失败,因为一个VARCHAR(20)
值包含一个在复制命令期间Ä
被翻译的值..
,现在对于 20 个字符来说太长了。
我已经验证了 S3 中的数据是正确的,但是COPY
在导入过程中命令不理解 UTF-8 字符。有没有人找到解决方案?
您的列的字节长度varchar
只需要更大。
数据类型支持多字节字符 (UTF-8) varchar
,但提供的长度以字节为单位,而不是字符。
多字节字符加载错误的 AWS 文档说明如下:
VARCHAR
列接受多字节 UTF-8 字符,最多四个字节。
因此,如果您希望Ä
允许该字符,则需要为该字符允许 2 个字节,而不是 1 个字节。
VARCHAR 或 CHARACTER VARYING的 AWS 文档说明如下:
...所以一
VARCHAR(120)
列最多包含 120 个单字节字符、60 个二字节字符、40 个三字节字符或 30 个四字节字符。
对于 UTF-8 字符及其字节长度的列表,这是一个很好的参考: 完整的 UTF-8 字符列表
可在此处找到 Unicode 字符“带分音符号的拉丁大写字母 A”(U+00C4) 的详细信息。
请检查以下链接
http://docs.aws.amazon.com/redshift/latest/dg/multi-byte-character-load-errors.html
您应该在复制命令中使用ACCEPTINVCHARS 。详情在这里
http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#acceptinvchars
我有类似的经历,Ä
在将 mysqldump 数据加载到我们的 Redshift 集群时,只有一些字符没有正确复制。这是因为 mysqldump 的编码是latin1
mysql 的默认字符集。最好先检查 COPY 文件的字符编码。如果文件的编码不是 UTF-8,则必须对文件进行编码。
您需要增加 varchar 列的大小。检查 stl_load_errors 表,查看失败行的实际字段值长度是多少,并相应地增加大小。编辑:刚刚意识到这是一个非常古老的帖子,无论如何如果有人需要它..
在复制命令中使用“ACCEPTINVCHARS ESCAPE”为我们解决了这个问题,只需少量数据更改。