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

Python 为什么pyodbc会在Fedora 27 ppc64上生成乱码错误消息?,python,python-3.x,fedora,pyodbc,Python,Python 3.x,Fedora,Pyodbc,我正在Fedora27ppc64(IBMPOWER720)上使用pyodbc(3.0.10-9)和Python3(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=

我正在Fedora27ppc64(IBMPOWER720)上使用pyodbc(3.0.10-9)和Python3(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)')
回溯(最近一次呼叫最后一次):
文件“podbc.py”,第16行,在
main()
文件“podbc.py”,第6行,主
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)。它包括对的修复

更新:

你有一个典型的例子。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]无法连接:Adaptive Server不可用或不存在”

通常,人们会使用pyodbc的
连接.setdecoding
方法(如上所述)来解决endian不匹配的问题,但您的错误是在建立连接之前发生的。您可能需要针对您的特殊情况提出建议。

下载了最新的tar.gz,安装了pip和pip3(--升级选项)。通过pip冻结和pip3冻结进行检查。现在我有了pyodbc==4.0.24(在Python 2和3上)。仍然存在相同的乱码错误消息。有什么想法吗?@Molasar-你在使用哪个ODBC驱动程序?微软的“SQL Server的ODBC驱动程序xx”。。。?免费的。。。?还有,它是什么版本?我正在使用发行版的软件包:unixODBC-2.3.4-7.fc27.ppc64.rpm和freetds-1.00.38-4.fc27.ppc64.rpm。我相信我发行版的arch(ppc64)没有Microsoft ODBC驱动程序。。。