将 Unicode 数据从 mysql 加载到 Redshift 失败,并显示"Bad UTF8 hex sequences"



我正在尝试使用Python创建一个简单的表复制器,从MySQL到RedShift。我正在这样做的方法是在MySQL中查询表并使用Python(2.7)将输出写入CSV,然后将其运送到S3并在其各自的目标表中进行副本。

我遇到了一个Unicode字符的问题。具体来说,我会收到以下错误:

String contains invalid or unsupported UTF8 codepoints. Bad UTF8 hex sequence: e9 20 50 (error 4)

我的问题是这是Python问题还是S3/RedShift问题。这是我在Python中所做的:

import unicodecsv as csv
csv_writer = csv.writer(dest, encoding='utf-8')
for index,line in enumerate(a):
    if index == len(a)/2:
        file_ext+=1
        if dest: dest.close()
        dest = open(config['data_dir'] + directory + '/' + table_name + '.txt.' + str(file_ext), 'wb')
        csv_writer = csv.writer(dest, encoding='utf-8')
    csv_writer.writerow(line)

因此,据我了解,Python正在正确编写内容。确实,如果我在VI中打开CSV,我可以看到: "Fjällräven Canvas Black Kanken 15 Laptop Bag"""因此,看起来对我很正确( and extra"是源头的垃圾。但是,如果我针对CSV运行文件,我会得到:ASCII text, with very long lines, with CRLF line terminators。将文件移至S3并运行副本后,我最终将上方红移副本错误。

所以回到一个问题:我怀疑这与 file 编码的方式有关,而不是其中的内容,但我找不到通过我的搜索,任何确定的事情。有人遇到过这个问题吗?感谢您的帮助

事实证明,我上面显示的所有内容都很好,但是MySQL并没有导出UTF-8字符。它是通过将以下两行添加到我的连接字符串中来修复的:

'use_unicode' : True,
'charset':'utf8'

相关内容

最新更新