2013-07-03 73 views
0

MySQLdb是一个与mysql数据库进行通信的python模块。 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 set col =“昞\”,这是错误的,不能 所以有谁曾经来过这样的问题Python MySQLdb escape_string

PS我googled的问题,发现有一种方法mysqli_set_charset在PHP中可以解决这种情况下,所以,我不知道是否呃Python中有这样一个。

回答

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

Appearently类似problem通过运行下面的查询首先要解决

SET NAMES 'gbk