python中mysql模塊的內存泄露和中文亂碼詳解
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!