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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
pandas分组聚合详解
Apr 10 Python
keras中的卷积层&池化层的用法
May 22 Python
pycharm永久激活超详细教程
Oct 29 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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新手上路(六)
2006/10/09 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
简单实现python进度条脚本
2017/12/18 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
经典c++面试题五
2014/12/17 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
文职个人求职信范文
2013/09/23 职场文书
大学生毕业自我评价范文分享
2013/11/07 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
未婚证明书模板
2014/10/08 职场文书
刘公岛导游词
2015/02/05 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android