ホームページ > バックエンド開発 > Python チュートリアル > Pythonのmysqlモジュールのメモリリークと中国語文字化けについて詳しく解説

Pythonのmysqlモジュールのメモリリークと中国語文字化けについて詳しく解説

高洛峰
リリース: 2016-10-18 13:44:51
オリジナル
1277 人が閲覧しました

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)
ログイン後にコピー

これでこの問題は完全に解決されます、笑


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート