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使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
Python打印斐波拉契数列实例
Jul 07 Python
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
Django权限设置及验证方式
May 13 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
Python过滤序列元素的方法
Jul 31 Python
python实现的人脸识别打卡系统
May 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下mysql数据库操作类(改自discuz)
2010/07/03 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
Python get获取页面cookie代码实例
2018/09/12 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
Python 多进程、多线程效率对比
2020/11/19 Python
个人教师自我评价范文
2013/12/02 职场文书
大学生自荐信
2013/12/11 职场文书
家长学校培训材料
2014/08/20 职场文书
地震慰问信
2015/02/14 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
六年级作文之家庭作文
2019/12/12 职场文书