Python调用MySQLdb插入中文乱码的问题


  1. #!/usr/bin/python   
  2. # -*- coding: utf-8 -*-   
  3.   
  4. import MySQLdb  
  5.   
  6. def main():  
  7.     fullname = "赵钱孙李"  
  8.   
  9.     conn = MySQLdb.connect(host='localhost', user='root',passwd='123', db='account', charset='utf8')  # OK   
  10.     #conn = MySQLdb.connect(host='localhost', user='root',passwd='123', db='account')  # Error!!!   
  11.     cursor = conn.cursor()  
  12.     cursor.execute("insert into account (username,password) values ('%s','%s')" % (fullname, "111"))  
  13.     conn.commit()  
  14.     cursor.close()  
  15.     conn.close()  
  16.   
  17. if __name__ == "__main__":  
  18.     main()  

如果从终端查询到数据库中的中文是乱码,那么在连接时给出charset参数即可(当然数据库和表必须全部都是utf-8的)。
否则默认插入的字符应该是latin-1的(用fullname.decode('utf8')时报该错误)。

然后将从数据库中读取的中文输出到网页,如果没有任何内容显示,加入以下代码可解决:

  1. import sys  
  2. reload(sys)  
  3. sys.setdefaultencoding('utf-8')  
Python内部处理编码默认是ascii的: print sys.getdefaultencoding()

相关内容