2013-07-03 126 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