免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3122 | 回复: 7
打印 上一主题 下一主题

python操作mySQL增加中文数据乱码问题,多种方法用了,还是不行,恳请朋友指导,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-27 11:17 |只看该作者 |倒序浏览
操作系统WINDOWS XP,
Python 2.7.5
mySQL 5.2.5
看了网上多篇文章,试了多种方法,均不行。

1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf- OK
2 MySQL数据库charset=utf-8  安装MySQL缺省编码为该参数
3 Python连接MySQL是加上参数 charset=utf8  创建数据库使用了该参数
4 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-    该条语句执行后,后面的语句不执行。      
以下为代码                                                            
# -*- coding: utf-8 -*-

import MySQLdb
import os
import sys
import time

#reload(sys)   
#sys.setdefaultencoding('utf-8')  这两条语句运行后,后面的语句不执行
print time.ctime()

def mysql1():
    conn = MySQLdb.connect(host='localhost', user='root',passwd='root_123')  
    cursor = conn.cursor()
    cursor.execute('''create database if not exists chineset CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';''')
    conn.select_db('chineset');
    sql1='''create table if not exists chineset1(Chinese varchar(50)) default charset='utf8';'''
    cursor.execute(sql1)
    retstr="您好".decode('gbk').encode('utf-8')
    sql2='''insert into chineset1 values('%s');''' % retstr
    print sql2
    cursor.execute(sql2)
    conn.commit()
    n = cursor.execute( 'select * from chineset1' )
    rows=cursor.fetchall()
    for row in rows :
        print "row",row[0].decode('utf-8')

    cursor.close
    conn.close


if __name__=='__main__':
    mysql1()

新建一个chineset库,新建一个表chineset1,表中只有一个字段Chinese,增加一条“您好”的中文数据,其后查询该表数据并输出到屏幕上。以下是Python IDE的输出结果


以下是mySQL查询的结果


Python和mySQL显示的都是乱码,没招了,恳请各位老师指导,谢谢。

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
2 [报告]
发表于 2014-02-27 11:23 |只看该作者
connect 后设置一下set names utf8

论坛徽章:
0
3 [报告]
发表于 2014-02-27 11:35 |只看该作者
不行啊,在cursor.execute(sql1)后
加了这条语句
cursor.execute('''SET NAMES 'gbk';''')出现如下错误

论坛徽章:
0
4 [报告]
发表于 2014-02-27 11:43 |只看该作者
回复 2# weishuo1999

不好意思,我看错了,您的代码应该是cursor.execute('''SET NAMES 'utf8';'''),重新改了一下,还是不行。



论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
5 [报告]
发表于 2014-02-27 13:24 |只看该作者
只要验证输出到文件的内容是正确的就可以了,Python在Win终端下不能正常显示gbk以外的字符

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2014-02-27 14:03 |只看该作者
Windows ... ...

论坛徽章:
0
7 [报告]
发表于 2014-02-28 12:36 |只看该作者
昨晚在ubuntu下面试的,希望有用,我是先修改好字符集为utf8,把原来非在字符集utf8创建的库与表,还有行全删了,再创建新的库,表,行
然后再用
db=MySQLdb.Connect(host='localhost',user='test',passwd='111111',db='test',compress=1,cursorclass =MySQLdb.cursors.DictCursor,charset='utf8')
创建连接,就可以。

论坛徽章:
0
8 [报告]
发表于 2014-03-03 15:51 |只看该作者
回复 7# jealousy


    我的系统是WINDOWS,用的您的代码还是不行,感谢您的热心帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP