python中mysql模塊的內存泄露和中文亂碼詳解

ybw8 9年前發布 | 16K 次閱讀 Python開發 Python

mysql-python的連接時,默認大家會寫成

con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,charset='gbk')

一旦指定了"gbk",默認mysql-python會設定use_unicode=True。結果是mysql-python會利用python自己的 codec模塊去做字符解碼工作,但實際中發現mysql庫gbk編碼字符集比python的gbk編碼集大。一些在mysql里可以存儲的字符,拿 python的codec去解析就會拋錯。更嚴重的問題是,在mysql-python1.2.3之前,use_unicode=True即讓 mysql-python解碼這塊存在內存泄露的bug。解碼出來所有數據庫字符串經過mysql-python出來都是unicode object,要輸出到文件需要再次編碼。


解決方法是強制指定use_unicode=False。即:

con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,charset='gbk',use_unicode=False)

這樣既不會有內存泄露,也不需要在輸出文件時進行編碼。也回避了python的codec不能解析mysql gbk里面存放的字符串的問題。 最后對于mysql4,我們可以將charset參數留空:

con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,use_unicode=False)

這樣就完美解決了這個問題,哈哈

 本文由用戶 ybw8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!