我有一个GBK编码数据表。有时,使用unicode字符串插入SQL会失败,并出现异常:
mysql.connector.errors.ProgrammingError:处理pyformat参数失败;'gbk‘编解码器无法对位置14中的字符u'\u2022’进行编码:非法
这是由于在mysql-connector-python库中对unicode对象编码时不带参数'ignore‘造成的。但我不能修改代码。如何解决这个问题?
发布于 2013-07-09 15:57:15
hago的评论已经提到了过滤Unicode字符,这不是GBK的一部分,但我想给出一个完整的例子使用MySQL连接器/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编码。
https://stackoverflow.com/questions/17518930
复制相似问题