You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyodbc连接SQL Server时遭遇异常错误求助

排查pyodbc连接SQL Server时的std::runtime_error异常

先聊聊你的问题:你在使用pyodbc连接SQL Server执行查询时,碰到了这个和系统区域配置相关的崩溃异常,先看一下你的代码片段和错误信息:

你的代码片段

connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=xxxxx.xxxx.net;PORT=1443;DATABASE=xxx;UID=xxxx;PWD=xxxx')
cursor = connection.cursor()
SQLCommand = ("SELECT [Date]...FROM [dbo].[...]")
cursor.execute(SQLCommand)
results = cursor.fetchone()
connection.close  # 这里提醒下:你漏了括号,正确写法是connection.close()

错误信息

libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: collate_byname::collate_byname failed to construct for C/en_US.UTF-8/C/C/C/C...

这个错误本质是系统Locale配置异常导致的,pyodbc底层依赖系统的字符排序组件,当它无法识别C/en_US.UTF-8这种混合的Locale设置时就会触发崩溃。下面是几个实用的解决方法:


1. 修复系统Locale设置(最常见的解决方式)

这个问题在macOS上比较高发,先打开终端运行locale命令,查看当前的Locale配置。如果输出里有LC_COLLATE=C/en_US.UTF-8或者LC_ALL是类似的混合值,那就是问题根源。

你可以临时设置正确的UTF-8 Locale:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

运行完这两行后,再重新执行你的Python脚本,大概率就能解决问题。如果想让这个设置永久生效,把这两行添加到你的shell配置文件里:

  • 用bash的话,编辑~/.bash_profile
  • 用zsh的话,编辑~/.zshrc
    保存后重启终端或者执行source ~/.zshrc(对应你的配置文件)即可。

2. 在pyodbc连接字符串里强制指定字符集

在连接字符串中加入CHARSET=UTF-8参数,让pyodbc直接使用UTF-8编码,绕过系统Locale的依赖:

connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=xxxxx.xxxx.net;PORT=1443;DATABASE=xxx;UID=xxxx;PWD=xxxx;CHARSET=UTF-8')

3. 升级ODBC驱动版本

你当前使用的是ODBC Driver 17 for SQL Server,旧版本的驱动在macOS的Locale处理上可能存在bug。可以尝试升级到最新的ODBC Driver 18 for SQL Server,重新安装后再测试你的代码。


内容的提问来源于stack exchange,提问作者thomassantosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:54:23