Python连接mssql数据库乱码(中文变问号)解决方法

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'xb9xf9xbexb8', u'u7537 ', 35, u'xb4xf3xcfxc0'),
 (u'20093502', u'xbbxc6xc8xd8', u'u5973 ', 34, u'xc3xc0xc5xae'),
 (u'20093503', u'xc1xeexbaxfcxb3xe5', u'u7537 ', 25, u'2Bxc7xe0xc4xea'),
 (u'20093504', u'xc8xcexd3xafxd3xaf', u'u5973 ', 24, u'xc6xafxc1xc1')]
 [Finished in 0.2s]

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

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

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

时间: 2024-11-16 06:46:34

Python连接mssql数据库乱码(中文变问号)解决方法的相关文章

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

python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合). (1).首先,要保证文件的开头要加上编码设置来说明文件的编码 复制代码 代码如下: #encoding=utf-8 (2).然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号 复制代码 代码如下: conn=p

plsql连接oracle数据库报ora 12154错误解决方法_oracle

plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

php mssql 日期出现中文字符的解决方法_php技巧

比如:2005-12-23 读出以后页面会显示为:2005 十二月 23 ,这样给程序处理带来很多不便.查找了一些资料发现是php.ini默认了日期处理功能. 解决方法为: 第一个方法:php文档开头定义ini_set("mssql.datetimeconvert","0″); 第二个方法:修改php.ini,找到;mssql.datetimeconvert = On ,去掉前面的分号,修改on为off,重启apache即可 第三个方法:用SQL的 convert()函数转换

my eclipse-Myclipse 运行sql文件后数据库中中文变成问号

问题描述 Myclipse 运行sql文件后数据库中中文变成问号 拷贝过来的项目,项目中又一个sql文件,用myclipse的database explorer 运行后中文变成???但是用Mysqlworkbench运行sql文件数据库中文就没事,求大神帮我. 解决方案 mysql里面的中文变成问号???的解决方案 解决方案二: 肯定是编码的问题. 比方原来sql文件是 gbk编码 可以转换成一个utf-8编码的sql文件(新建一个copy.sql文件编码在myeclipse中设置成utf-8然

MySQL Connector/NET连接mysql数据库乱码

问题描述 用MySQLConnector/NET连接mysql数据库乱码,凡是字段是中文就会乱码,myini文件已修改成default-character-set=gb2312,连接字符串也改成了default-character-set=gb2312,依然是乱码,请大家指教 解决方案 解决方案二:MYSQL是有这个问题的,修改INI文件都可以解决的一般情况,你找找MYSQL类的问题看下.解决方案三:困扰了好几天的问题,没有人懂吗解决方案四:页面,数据库编码都设一致,如果不行话的话,就用转换的看

python连接MySQL数据库实例分析

  本文实例讲述了python连接MySQL数据库的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 import MySQLdb conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="test") cursor = conn.cursor() cursor.execute(&

thinkphp3查询mssql数据库乱码解决方法

 这篇文章主要介绍了thinkphp3查询mssql数据库乱码解决方法,需要的朋友可以参考下 thinkphp查询mssql数据库出现乱码的原因是ThinkPHP默认为UTF-8,而msmsql数据库是简体中文版,存储的是GB2312编码   解决方法:   1:在ThinkPHPLibCore 打开Db.class.php,在其最后面加上 2:在Db.class.php找到function select(),在$result = $this->query($sql);后面加一条 $result

python连接mysql数据库出错,已经试了网上的几种方法,,求助

问题描述 python连接mysql数据库出错,已经试了网上的几种方法,,求助 http://blog.csdn.net/lishan9133/article/details/7024989 之前是按照上面的教程安装了mysqldb模块,可是在实际操作过程中,找不到对应行的代码,所以并没有按照上面的改. 打开数据库连接 db = MySQLdb.connect( host='192.188.80.41', port=3306, user='root', passwd='123456', db='

【Oracle】Python 连接Oracle 数据库

Python 连接Oracle 数据库,需要使用cx_Oracle 包. 1 下载cx_Oracle 该包的下载地址:http://cx-oracle.sourceforge.net/ 下载的时候,注意选择与操作系统和oracle版本相对应的cx_Oracle版本. 2 安装 [root@rac3 python]# rpm -ivh cx_Oracle-5.1.1-11g-py24-1.x86_64.rpm  Preparing...                ###############