繁体   English   中英

mysql-connector-python GBK编码错误

[英]mysql-connector-python GBK encoding error

我有一个GBK编码数据表。 有时,带有unicode字符串的插入SQL失败,并出现以下异常:

mysql.connector.errors.ProgrammingError:处理pyformat参数失败; 'gbk'编解码器无法对位置14中的字符u'\\ u2022'进行编码:非法

这是由于在mysql-connector-python库中对不带参数'ignore'的unicode对象进行编码引起的。 但是我无法修改代码。 如何解决这个问题呢?

已经提到了hago的评论,该评论用于过滤不属于GBK的Unicode字符,但是我想举一个使用MySQL Connector / Python的完整示例。

# -*- coding: utf-8 -*-

import mysql.connector

cnx = mysql.connector.connect(
    database='test', charset='gbk', use_unicode=False
)
cur = cnx.cursor()

cur.execute("DROP TABLE IF EXISTS gbktest")
table = (
    "CREATE TABLE gbktest ("
    "id INT AUTO_INCREMENT KEY, "
    "c1 VARCHAR(40)"
    ") CHARACTER SET 'gbk'"
)
cur.execute(table)

data = {
    'c1': u'\u2022国家标准'.encode('gbk', 'ignore')
}
cur.execute("INSERT INTO gbktest (c1) VALUES (%(c1)s)", data)
cnx.commit()
cur.execute("SELECT id, c1 FROM gbktest")
rows = cur.fetchall()
# Terminal using UTF-8 encoding:
#print rows[0][1].decode('gbk')
# Terminal using GBK encoding:
print rows[0][1]

最后两行需要注释/取消注释,这取决于您的终端使用的是UTF-8还是GBK编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM