0

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

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

它是由在 mysql-connector-python 库中编码没有参数“忽略”的 unicode 对象引起的。但我无法修改代码。如何解决这个问题呢?

4

1 回答 1

1

hago 的评论已经提到过滤不属于 GBK 的 Unicode 字符,但我想给出一个使用 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 编码。

于 2013-07-09T07:57:15.417 回答