我只是在下拉数据库表并尝试将其读入python,如下所示:
with query(full_query_string) as cur:
arr = cur.fetchall()
这会从fetchall()
:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 4: invalid continuation byte
如果我select *
我收到此错误,而如果我限制为少量行,我不会收到此错误。在我发布这篇SO UnicodeDecodeError, invalid continuation byte之后,我尝试使用一些编码付费,但他们都没有做到这一点。在一个大型数据库表中,我不知道编码是如何出错的,处理这个问题的最有效方法是什么?此外,没有特定的行是必须的,但我宁愿得到除了那些编码问题之外的所有行。
答案 0 :(得分:4)
嘿,我知道这是一个超级迟到的答案,但在尝试调试类似的问题时,我从vertica-python自述文件中找到了这个修复:
虽然Vertica期望存储的varchars有时是UTF-8编码的 无效的字符串进入数据库。您可以指定如何处理 使用unicode_error连接选项读取这些字符。 它使用与unicode类型相同的值 (https://docs.python.org/2/library/functions.html#unicode)
尝试更改' unicode_error'密钥从strict
到replace
或ignore
:
cur = vertica_python.Connection({..., 'unicode_error': 'strict'}).cursor()
cur.execute(r"SELECT E'\xC2'") cur.fetchone()
# caught 'utf8' codec can't decode byte 0xc2 in position 0: unexpected end of data
cur = vertica_python.Connection({..., 'unicode_error': 'replace'}).cursor()
cur.execute(r"SELECT E'\xC2'") cur.fetchone()
# �
cur = vertica_python.Connection({..., 'unicode_error': 'ignore'}).cursor()
cur.execute(r"SELECT E'\xC2'") cur.fetchone()
#