【问题标题】:Python MySQL encoding Error: 'latin-1' codec can't encode character: ordinal not in range(256)Python MySQL 编码错误:“latin-1”编解码器无法编码字符:序数不在范围内(256)
【发布时间】:2017-06-02 00:38:12
【问题描述】:

我已经被 Python 中的 UnicodeEncodeError 卡住了一段时间。

这是我正在做的事情:

  1. 我创建了一个数据框作为各种分析的结果。数据框总共有 30 列,包含多种类型的值(intstringdatetime 等)。
  2. 我在已安装 MySQL 的 Azure 中创建了一个远程实例的 SSH 连接。我使用SQLAlchemy 创建连接。
  3. 我运行df.to_sql 命令并得到以下错误

UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' 在第 8 位:序数不在范围内(256)

我试过这样做,但似乎没有用。

engine = create_engine('mysql+pymysql://user:pwd@host:%s/db?charset=utf8' % server.local_bind_port)

我已阅读 here,我可以使用 u.encode('latin-1', 'replace')。但是我是否需要执行该操作并遍历每个 String 列并对其进行编码?或者还有什么我可以做的吗?

【问题讨论】:

  • 你用的是哪个版本的python?
  • @pshep123 - 在 Azure 中我使用 Python 2.7.12 - 在我的本地 PC 2.7.13 Anaconda 4.4.0
  • 谢谢。不幸的是,我无法为您提供帮助,但我自己也遇到了 unicode 问题,通过我最近的研究,我意识到 python 3 和 python 2 处理文本格式的方式不同,因此对那些更重要的人来说很重要比我知识渊博知道哪个版本。在此期间,这里有一些阅读:docs.python.org/2/howto/unicode.html,可能会有所帮助。

标签: python mysql pandas


【解决方案1】:

这是我想出的解决方案。

我创建了一个对数据中不同字符进行编码的函数。

def custom_encoder(x):
    #Check if the value is Unicode
    if type(x)==type(u''):
        return x.encode('utf8','ignore')
    else:
        return x

我遍历所有列并对所有值进行编码。之后,MySQL 允许写入数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多