>백엔드 개발 >파이썬 튜토리얼 >Python의 mysql 모듈에서 메모리 누수 및 중국어 왜곡 문자에 대한 자세한 설명

Python의 mysql 모듈에서 메모리 누수 및 중국어 왜곡 문자에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-10-18 13:44:511266검색

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을 통해 유니코드 객체로 출력됩니다. 이를 파일로 출력하려면 다시 인코딩해야 합니다.


해결책은 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)

이렇게 하면 이 문제가 완벽하게 해결됩니다. 하하


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.