10

我们在 S3 中有一个文件,它通过COPY命令加载到 Redshift。导入失败,因为一个VARCHAR(20)值包含一个在复制命令期间Ä被翻译的值..,现在对于 20 个字符来说太长了。

我已经验证了 S3 中的数据是正确的,但是COPY在导入过程中命令不理解 UTF-8 字符。有没有人找到解决方案?

4

5 回答 5

15

tl;博士

您的列的字节长度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) 的详细信息。

于 2015-06-09T06:09:59.910 回答
1

请检查以下链接

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

于 2014-12-24T06:30:27.390 回答
0

我有类似的经历,Ä在将 mysqldump 数据加载到我们的 Redshift 集群时,只有一些字符没有正确复制。这是因为 mysqldump 的编码是latin1mysql 的默认字符集。最好先检查 COPY 文件的字符编码。如果文件的编码不是 UTF-8,则必须对文件进行编码。

于 2014-12-29T23:31:45.267 回答
0

您需要增加 varchar 列的大小。检查 stl_load_errors 表,查看失败行的实际字段值长度是多少,并相应地增加大小。编辑:刚刚意识到这是一个非常古老的帖子,无论如何如果有人需要它..

于 2019-08-16T12:45:28.427 回答
0

在复制命令中使用“ACCEPTINVCHARS ESCAPE”为我们解决了这个问题,只需少量数据更改。

于 2016-05-23T04:44:28.363 回答