Python连接mssql数据库编码问题解决方法


Posted in Python onJanuary 01, 2015

python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合)。

(1)、首先,要保证文件的开头要加上编码设置来说明文件的编码

#encoding=utf-8

(2)、然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')

(3)、设置python系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)
import sys

reload(sys)

sys.setdefaultencoding('utf8')

注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”

一个简单的完整的python连接mssqlserver的例子如下(得安装pymssql包):

#encoding:utf8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import pymssql

try:

    conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')

    sql="select * from UserInfo"
    cur=conn.cursor()

    cur.execute(sql)

    data=cur.fetchall()

    conn.close()

    print data

except Exception,e:

    print e

运行结果如下:

[(u'20093501', u'\xb9\xf9\xbe\xb8', u'\u7537 ', 35, u'\xb4\xf3\xcf\xc0'),

 (u'20093502', u'\xbb\xc6\xc8\xd8', u'\u5973 ', 34, u'\xc3\xc0\xc5\xae'), 

 (u'20093503', u'\xc1\xee\xba\xfc\xb3\xe5', u'\u7537 ', 25, u'2B\xc7\xe0\xc4\xea'), 

 (u'20093504', u'\xc8\xce\xd3\xaf\xd3\xaf', u'\u5973 ', 24, u'\xc6\xaf\xc1\xc1')]

 [Finished in 0.2s]

 

虽然摆脱了问号和乱码的困扰,但这仍不是我们想要的结果,但这个确实是正确的,因为结果是utf8编码。这个现象确实诡异,请教了许多高手,得知,最好的结果就是逐个字段查询,才能显示中文,整个查询的话,会以utf8的格式显示出来。

上述代码中第14行data是整个查询的结果,如果指定某个具体的字段,如print data[0][2](表示取查询结果的第一行第三列的字段的值),则会输出中文。

其实不仅仅是mssqlserver数据库,mysql(需下载MySQLdb包)、sqllite(python自带的文件数据库)、mongodb(需下载PyMongo包)等或者是普通文本文件也是类似的解决方案。

Python 相关文章推荐
Python中使用中文的方法
Feb 19 Python
python判断端口是否打开的实现代码
Feb 10 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
Python实现统计文本文件字数的方法
May 05 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
Python依赖包整体迁移方法详解
Aug 15 Python
Python pandas对excel的操作实现示例
Jul 21 Python
python绘制趋势图的示例
Sep 17 Python
Python 虚拟环境工作原理解析
Dec 24 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
详解Python函数print用法
Jun 18 Python
Python中optparse模块使用浅析
Jan 01 #Python
Python中urllib2模块的8个使用细节分享
Jan 01 #Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 #Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 #Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 #Python
Python模拟登录12306的方法
Dec 30 #Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 #Python
You might like
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python实现简单日期工具类
2019/04/24 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
酒店副总岗位职责
2013/12/24 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
决心书范文
2014/03/11 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
教师批评与自我批评
2014/10/15 职场文书
房屋买卖协议样本
2014/11/16 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
初中政治教学工作总结
2015/08/13 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
利用Python多线程实现图片下载器
2022/03/25 Python