首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql-connector-python GBK编码错误

mysql-connector-python GBK编码错误
EN

Stack Overflow用户
提问于 2013-07-08 11:50:48
回答 1查看 624关注 0票数 0

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

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

这是由于在mysql-connector-python库中对unicode对象编码时不带参数'ignore‘造成的。但我不能修改代码。如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 15:57:15

hago的评论已经提到了过滤Unicode字符,这不是GBK的一部分,但我想给出一个完整的例子使用MySQL连接器/Python。

代码语言:javascript
复制
# -*- 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编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17518930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档