當前位置:編程學習大全網 - 編程語言 - python3連接MSSQL數據庫 中文亂碼怎麽解決

python3連接MSSQL數據庫 中文亂碼怎麽解決

以前用php連mssqy時也經常出現中文亂碼(中文變問號)的問題,那時就明白是編碼沒設置好導航,現在的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包)等或者是普通文本文件也是類似的解決方案。

  • 上一篇:樂高編程商業計劃書
  • 下一篇:開發壹個APP的詳細流程有什麽?
  • copyright 2024編程學習大全網