是否可以让 SQL 服务器将排序规则转换为 UTF-8 / UTF-16

Is it possible to have SQL Server convert collation to UTF-8 / UTF-16

在我正在处理的一个项目中,我的数据存储在 SQL 服务器中,排序规则 Danish_Norwegian_CI_AS。数据通过 FreeTDS 和 ODBC 输出到 python,将数据作为 UTF-8 处理。一些字符,如 å、ø 和 æ,编码不正确,导致项目进度陷入停顿。

我花了几个小时阅读有关编码、整理和代码页的混乱世界,感觉我对整个画面有了更好的理解。

我读过的一些文章让我认为可以: 在 SQL select 语句中指定,当它被输出了。

我认为这是可能的原因是 this article 它展示了一个示例,说明如何使用不同的排序规则进入表格,一起玩得很好。

任何关于将排序规则转换为 UTF-8/UTF-16 的指示,将不胜感激!

编辑:我读到 SQL 服务器通过 ncharnvarcharntext 提供了一个 unicode 选项,并且其他字符串变量 char, varchartext 根据设置的排序规则进行编码。我还读到上面提到的 unicode 选项是用 utf-16 变体 ucs-2 编码的(我希望我没记错)。所以;为了让 locale collat​​ion 和 unicode 表能玩得好,应该有一个转换函数,不是吗?

似乎 SQL 不支持 UTF-8(参见 here),但您可以尝试更改 select 中的排序规则,例如:

SELECT Account COLLATE SQL_Latin1_General_CP1_CI_AS
from Data

您还可以使用此解决方案去除重音符号:How to remove accents and all chars <> a..z in sql-server?

另一种解决方案是将您的列转换为 nvarchar

SELECT cast (Account as nvarchar) as NewAccount 
from Data

您的首字母 table 中的帐户是 varchar。

例如,如果您尝试:

SELECT cast(cast(N'ţ' as varchar) as nvarchar)

最终结果将是“ţ”

4 个月后,我终于找到了问题的答案。事实证明它与 FreeTDS 驱动程序或数据库排序规则无关:

这是pyodbc的连接函数,显然需要一个标志; unicode_results=True

张贴在这里是为了帮助其他注定要在黑暗中漫无目的地游荡、寻找线索的不幸灵魂。