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中的列表推导浅析
Apr 26 Python
Python中函数的用法实例教程
Sep 08 Python
Python类的专用方法实例分析
Jan 09 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
python django 实现验证码的功能实例代码
May 18 Python
python实现决策树分类算法
Dec 21 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
python PyTorch预训练示例
Feb 11 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
如何理解python面向对象编程
Jun 01 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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 include加载文件两种方式效率比较
2010/08/08 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
javascript innerHTML使用分析
2010/12/03 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
python使用range函数计算一组数和的方法
2015/05/07 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
八一建军节部队活动方案
2014/02/04 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
领导干部失职检讨书
2015/05/05 职场文书