pymssql 连接失败,出现“无法识别排序规则”

Posted

技术标签:

【中文标题】pymssql 连接失败,出现“无法识别排序规则”【英文标题】:pymssql connection fails with "collation not recognized" 【发布时间】:2017-08-09 05:30:30 【问题描述】:

我尝试使用 python3(3.5.3) 库pymssql(2.1.3) 连接到 sql server 2012 db,然后发生了这个错误:

conn = pymssql.connect(host="192.168.xxx.xxx", user="wbs", password="123@123", database="mydb")
Traceback (most recent call last):
  File "pymssql.pyx", line 635, in pymssql.connect (pymssql.c:10734)
  File "_mssql.pyx", line 1902, in _mssql.connect (_mssql.c:21821)
  File "_mssql.pyx", line 637, in _mssql.MSSQLConnection.__init__ (_mssql.c:6581)
  File "_mssql.pyx", line 1630, in _mssql.maybe_raise_MSSQLDatabaseException (_mssql.c:17524)
_mssql.MSSQLDatabaseException: (4075, b'DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 14:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (192.168.100.249:1433)\n')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pymssql.pyx", line 641, in pymssql.connect (pymssql.c:10824)
pymssql.OperationalError: (4075, b'DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 14:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (192.168.100.249:1433)\n')

并且在 mssql 错误中有一个日志:

The USE database statement failed because the database collation %.*ls is not recognized by older client drivers. Try upgrading the client operating system or applying a service update to the database client software, or use a different collation. See SQL

【问题讨论】:

【参考方案1】:

默认情况下,pip 从静态链接到 FreeTDS 0.95 的二进制轮 (.whl) 文件安装 pymssql 2.1.3。不幸的是,旧版本的 FreeTDS 不知道如何使用一些不常用的 SQL Server 排序规则。例如,已知Persian_100_CI_AI 会导致类似于您在 FreeTDS 0.9x 下描述的错误(参考:here)。

FreeTDS 1.x 对这些排序规则有更好的支持,因此您可以选择安装最新的 FreeTDS 稳定版本(当前为 1.00.51),然后从 GitHub 上的最新源构建 pymssql。

或者,您可以尝试将 pyodbc 与 Microsoft 的 SQL Server ODBC 驱动程序的当前版本一起使用。

【讨论】:

非常感谢,我从 git 编译并安装了 freetds 最新稳定版和 pymssql 最新版,一切正常!

以上是关于pymssql 连接失败,出现“无法识别排序规则”的主要内容,如果未能解决你的问题,请参考以下文章

Sqlalchemy + pymssql 连接失败

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

使用 pymssql 的 Python/Flask/sqlAlchemy 环境中的 Adaptive Server 连接失败错误

pymssql连接sql server报错:pymssql._pymssql.OperationalError

如何使用 pymssql 创建多个连接?

pymssql:Mac OS 中的软件包安装失败