为什么pyodbc在Fedora 27 ppc64上生成乱码错误消息



我在Fedora 27 ppc64(在IBM Power 720上(上使用pyodbc(3.0.10-9(和Python 3(3.6.6-1(。我有一个非常简单的脚本,它连接到MS SQL Server(W2K8R2上的2K8R2(数据库表,如下所示:

import time
import pyodbc
# import pyximport; pyximport.install()
def main():
cnxn = pyodbc.connect('DSN=something;UID=uu;PWD=pppp;', ansi=True)
cursor = cnxn.cursor()
cursor.execute('SELECT * FROM dbo.tb_Table;')
for row in cursor:
print(row)
if __name__ == '__main__':
time.sleep(3)
main()
input()

如果UID和PWD正确,则一切正常。

因此,我停止了Windows服务器上的SQL Server服务,以便在Power7机器上看到错误消息。

然而,我在Mac OSX(10.11.6(终端和Fedora 27 gnome终端上收到了这个混乱的错误:

Traceback (most recent call last):
File "podbc.py", line 16, in <module>
main()
File "podbc.py", line 6, in main
cnxn = pyodbc.connect('DSN=something;UID=uu;PWD=pppp;', ansi=True)
pyodbc.OperationalError: ('08S01', '[08S01] 嬀䘀爀攀攀吀䐀匀崀嬀匀儀䰀u2000匀攀爀瘀攀爀崀唀渀愀戀氀攀u2000琀漀u2000挀漀渀渀攀挀琀㨀u2000䄀搀愀瀀琀椀瘀攀u2000匀攀爀瘀攀爀u2000椀猀u2000甀渀愀瘀愀椀氀愀戀氀攀u2000漀爀u2000搀漀攀猀u2000渀漀琀u2000攀砀椀猀琀 (20009) (SQLDriverConnect)')

为什么?我怎样才能把它"翻译"成可读的(英文(形式?

感谢任何帮助或建议。

pyodbc 3.0.10非常旧。升级至最新版本(当前为4.0.24(。其中包含此问题的修复程序。

更新:

你有一个典型的mojibake案例。ppc64默认为大端字节排序,但Microsoft SQL Server(以及FreeTDS(使用小端字节排序因此从服务器返回的UTF_16编码消息被破坏:

>>> foo = '嬀䘀爀攀攀吀䐀匀崀嬀匀儀䰀u2000匀攀爀瘀攀爀崀唀渀愀戀氀攀u2000琀漀u2000挀漀渀渀攀挀琀㨀u2000䄀搀愀瀀琀椀瘀攀u2000匀攀爀瘀攀爀u2000椀猀u2000甀渀愀瘀愀椀氀愀戀氀攀u2000漀爀u2000搀漀攀猀u2000渀漀琀u2000攀砀椀猀琀'
>>> foo.encode('utf-16be').decode('utf-16le')
'[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist'

通常情况下,人们会使用pyodbc的Connection.setdecoding方法(在这里描述(来解决端序不匹配的问题,但您的错误是在建立连接之前发生的。你可能想在GitHub上就你的特殊情况提出一个问题。

相关内容

  • 没有找到相关文章

最新更新