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

2024-09-30 03:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在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服务器上的sqlserver服务,以便在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)')

为什么?我怎样才能“翻译”成一个可读(英语)的形式?你知道吗

感谢您的帮助或指点。你知道吗


Tags: inimportuidtimemainconnectpwdcursor
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:39

pyodbc3.0.10非常古老。升级至最新版本(目前为4.0.24)。它包括this issue的修复。你知道吗

更新:

你有一个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方法(如here所述)来解决endian ness中的不匹配问题,但是错误发生在建立连接之前。你可能想就你的特殊情况提出一个issue on GitHub。你知道吗

相关问题 更多 >

    热门问题