web.py连接mysql的中文显示问题
发布时间:2011/2/28 16:22:09 来源:城市学习网 编辑:ziteng
近几天研究使用python写一个管理程序,需要使用web.py,但在使用和显示中文时总是出错,查了一些资料,终于搞清楚了。
首先,要了解一些基本的知识。python的字符串分为两种,一种是str,一种是unicode,他们之前可以互相转换的。str转unicode,使用decode函数,反之使用encode函数。看个具体的例子:
str1='你好' #这时str1为str类型,因为我是在中文windows下运行,所以使用默认的gbk编码
str2=str1.decode('gbk') #这时str2为unicode,注意我们是使用的gbk进行解码,其实在中文windows下系统默认编码为gbk,所以我们也可以不输入参数
str3=str2.encode('utf-8')#这时str3为str类型,但编码为utf-8,这时我们不可以直接print,否则会为乱码,这很容易理解,因为我们在中文windows下,只能打印gbk编码的中文
好接下来让我们来看看如何把中文插入到mysql数据库,最好能统一编码,这里为了方便,我统一使用utf-8.
先建立表,注意把表的默认编码改为utf8(也可以直接把数据库的默认编码改为utf8,这里就不多说了
CREATE TABLE `network` (
`id` int(11) NOT NULL auto_increment,
`net_str` varchar(45) NOT NULL,
`flag` varchar(10) default NULL,
` `descript` text,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
连接数据库代码:
conn = MySQLdb.connect (host = "1.1.1.1",user = "qh",passwd = "yourpass",db = "yourdatabase",charset='utf8')
在插入数据时一定要称转化,把gbk的中文转为utf8的然后再插入到mysql(因为我的数据都是在windows下编辑的,所以文件的中文默认都是以gbk编码的,当然你也可以,使用文本编辑器直接把文件另存为utf-8格式)
str1=str2.decode('gbk')#str2是我从文件文件里直接读出的数据,现在str1是unicode了
str3=str1.encode('utf-8')#这时str3为str类型了,可以使用insert直接加入到mysql数据了
在web.py上取数
db1 = web.database(dbn='mysql', host = "1.1.1.1",user = "qh",passwd = "yourpass",db = "yourdatabase",charset='utf8',use_unicode=0)
注意一定要charset='utf8',use_unicode=0,这样取出来的数据才是str,然后可以在utf-8编码为web页直接显示了