- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import MySQLdb
- def main():
- fullname = "赵钱孙李"
- conn = MySQLdb.connect(host='localhost', user='root',passwd='123', db='account', charset='utf8') # OK
- #conn = MySQLdb.connect(host='localhost', user='root',passwd='123', db='account') # Error!!!
- cursor = conn.cursor()
- cursor.execute("insert into account (username,password) values ('%s','%s')" % (fullname,"111"))
- conn.commit()
- cursor.close()
- conn.close()
- if __name__ =="__main__":
- main()
如果从终端查询到数据库中的中文是乱码,那么在连接时给出charset参数即可(当然数据库和表必须全部都是utf-8的)。
否则默认插入的字符应该是latin-1的(用fullname.decode('utf8')时报该错误)。
然后将从数据库中读取的中文输出到网页,如果没有任何内容显示,加入以下代码可解决:
- import sys
- reload(sys)
- sys.setdefaultencoding('utf-8')
Python内部处理编码默认是ascii的: print sys.getdefaultencoding()
Python MySQLdb 使用utf-8 编码插入中文数据
用Python的MySQLdb插入UTF-8编码的内容时经常会出问题,主要是Mysql数据库编码和python程序文档编码两个方面。本文旨在提供一个例子来解决Python插入UTF8中文数据的问题
使用环境:
Python 2.5 for Windows
MySQLdb 1.2.2 for Python 2.5
MySQL 4.1.22
源代码如下:
#!/usr/bin/env python
#coding=utf-8
import MySQLdb
#DB parameter
strHost = '192.168.6.184'
strDB = 'test'
strUser = 'root'
strPasswd = 'admin1111'
#connect to DB
conn = MySQLdb.connect(host=strHost, db=strDB, user=strUser, passwd=strPasswd, charset="utf8")
curs = conn.cursor()
curs.execute("SET NAMES utf8")
curs.execute("SET CHARACTER_SET_CLIENT=utf8")
curs.execute("SET CHARACTER_SET_RESULTS=utf8")
conn.commit()
strVal = "广州"
strSql = "INSERT INTO t1( val ) values( '%s' )" % strVal
ret = curs.execute(strSql)
conn.commit()