0

GBK エンコーディング データ テーブルがあります。場合によっては、Unicode 文字列を含む挿入 SQL が次の例外で失敗することがあります。

mysql.connector.errors.ProgrammingError: pyformat-parameters の処理に失敗しました。「gbk」コーデックは、位置 14 の文字 u'\u2022' をエンコードできません: 不正です

これは、mysql-connector-python ライブラリでパラメータ「ignore」を使用せずに Unicode オブジェクトをエンコードすることが原因です。しかし、コードを変更することはできません。この問題を解決するには?

4

1 に答える 1

1

GBK の一部ではない Unicode 文字をフィルタリングすることについて既に述べた hago のコメントですが、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 エンコーディングを使用しているかどうかに応じて、最後の 2 行をコメント化またはコメント化解除する必要があります。

于 2013-07-09T07:57:15.417 に答える