MySQLdb是python与mysql数据库通信的模块。 escape_string是MySQLdb提供的一种方法,用于转义sql中的某些字符。例如,像'Update table Set col =“My”s“'这样的sql会导致错误。所以escape_string将帮助我们在”在我的“之前添加一个'\'。 但是,在gbk等多字节编码中,使用2个以上的字节来存储中文单词,escape_string只搜索要逐个转义的字符,这会导致某些特殊字符被错误地转义。例如,中文字符'昞',其字节为'\ x95 \ x5c',如果sql为'update table set col =“昞”',那么MySQLdb.escape_string(sql)将得到结果:update table设置col =“昞\”,这是错误的,无法正确执行。 那么有没有人遇到过这样的问题。
P.S我搜索了问题,发现php中有一个方法mysqli_set_charset可以解决这种情况,所以,我想知道python中是否有这样的一个。
答案 0 :(得分:0)
此问题很可能是因为您的连接的默认字符集是latin1而不是unicode。你可以尝试几种不同的东西。 From this post,
conn = mysql.connect(host='127.0.0.1',
user='user',
passwd='passwd',
db='db',
charset='utf8',
use_unicode=True)
然后你像这样运行你的查询
cursor.execute('INSERT INTO mytable VALUES (null, %s)',
('\x95\x5c',))
通过先运行以下查询
,解决了类似的problem问题SET NAMES 'gbk