mysql-python に接続するとき、デフォルトでは全員が
con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,charset='gbk')
「gbk」が指定されると、mysql-python はデフォルトで use_unicode=True を設定します。その結果、mysql-python は Python 独自のコーデック モジュールを使用して文字デコードを実行しますが、実際には、mysql ライブラリの gbk エンコード文字セットが Python の gbk エンコード セットよりも大きいことがわかります。 MySQL に保存できる一部の文字は、Python のコーデックを使用して解析するとエラーをスローします。さらに深刻な問題は、mysql-python1.2.3 より前では、use_unicode=True により mysql-python がこのメモリ リーク バグをデコードしていたことです。デコードされたすべてのデータベース文字列は、mysql-python を通じて Unicode オブジェクトとして出力され、ファイルに出力するには、再度エンコードする必要があります。
解決策は、use_unicode=Falseを強制することです。つまり:
con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,charset='gbk',use_unicode=False)
この方法では、メモリ リークは発生せず、ファイルの出力時にエンコードする必要もありません。また、Python のコーデックが mysql gbk に格納されている文字列を解析できないという問題も回避されます。 最後に、mysql4 の場合、charset パラメーターを空白のままにすることができます:
con=MySQLdb.connect(user='xxx',passwd='xxx',host='xxx',port=6600,use_unicode=False)
これでこの問題は完全に解決されます、笑