0

MySQLdb 是 python 的一个模块,用于与 mysql 数据库通信。escape_string 是 MySQLdb 提供的一种方法,用于对 sql 中的某些字符进行转义。比如 'Update table Set col = "My"s"' 这样的 sql 会报错,所以 escape_string 会帮我们在 My"s 中的 " 之前添加一个 '\'。但是,在像 gbk 这样的多字节编码中,使用2个字节以上存储一个中文单词,escape_string只逐个查找要转义的字符,这会导致一些特殊字符被错误转义。例如汉字'昞',其字节为' \x95\x5c',如果sql是'update table set col = "昞"',那么MySQLdb.escape_string(sql)会得到结果:update table set col = "昞\",这是错误的,无法正确执行。那么有没有人遇到过这样的问题。

PS我搜索了这个问题,发现php中有一种方法mysqli_set_charset可以解决这种情况,所以,我想知道python中是否有这样的方法。

4

1 回答 1

0

这个问题很可能是因为您的连接的默认字符集是 latin1 而不是 unicode。您可以尝试几种不同的方法。从这个帖子

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',))

显然,通过首先运行以下查询解决了类似的问题

SET NAMES 'gbk
于 2013-07-03T12:26:03.340 回答