pymssql:在数据库连接中设置charset选项会导致连接失败

时间:2013-07-30 17:20:24

标签: python sql pymssql

我已经在pymssql周围编写了一个包装器来连接到我工作的数据库。我遇到了unicode解码/编码错误,我试图在源头阻止它们。

当我指定charset='latin1' or'iso-8859-1'时,连接失败并出现以下错误:

  File "pymssql.pyx", line 549, in pymssql.connect (pymssql.c:7672)
    raise OperationalError(e[0])
pymssql.OperationalError: (20017, 'DB-Lib error message 20017, severity 9:\nUnexpected EOF from the server\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')

DB编码看起来是'latin1':

SELECT SERVERPROPERTY('Collation')

返回

SQL_Latin1_General_CP1_CI_AS
我认为,

与Python的'latin1'相同。

我这样做是否正确?我选择了错误的编码(即latin1iso-8859-1

2 个答案:

答案 0 :(得分:0)

看来你输入的内容非常挑剔。

考虑输入charset="ISO-8859-1"

答案 1 :(得分:-1)

使用大写字母,例如" ISO-8859-1"或" LATIN1"。

pymssql正在使用GNU iconv约定。 https://www.gnu.org/software/libiconv/

  

由于历史原因,国际文本通常使用语言或国家/地区相关字符编码进行编码。随着互联网的出现以及各国之间频繁的文本交换 - 甚至从外国观看网页也是一个文本交换"在这种情况下 - 这些编码之间的转换变得很重要。它们也成为一个问题,因为在许多其他编码中不存在一种编码中存在的许多字符。为了解决这个问题,已经创建了Unicode编码。它是所有其他编码的超级编码,因此是XML等新文本格式的默认编码。

     

尽管如此,许多计算机仍然使用传统(有限)字符编码在区域设置中运行。某些程序(如邮件程序和Web浏览器)必须能够在给定的文本编码和用户的编码之间进行转换。其他程序在内部以Unicode格式存储字符串,以便于内部处理,并且在进行I / O时需要在内部字符串表示(Unicode)和外部字符串表示(传统编码)之间进行转换。 GNU libiconv是两种应用程序的转换库。