簡體   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