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)
이렇게 하면 이 문제가 완벽하게 해결됩니다. 하하