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

Roo*_*kie 11 sql-server unicode collation utf-8 pyodbc

在我正在处理的项目中,我的数据存储在SQL Server中,并带有排序规则Danish_Norwegian_CI_AS.数据通过FreeTDS和ODBC输出到python,处理数据为UTF-8.一些字符,如å,ø和æ,没有被正确编码,导致项目进展停滞不前.

我花了几个小时阅读有关令人困惑的编码,校对和代码页的世界,感觉我已经对整个画面有了更好的理解.

我读过的一些文章让我觉得有可能:在SQL select语句中指定,在输出时,校对数据应编码为UTF-8.

我认为这是可能的原因是这篇文章展示了一个如何获得具有不同排序规则的表格以便一起玩的例子.

任何指向将校对转换为UTF-8/UTF-16的方向,都将非常感谢!

编辑:我已经读过,SQL Server提供了一个unicode选项nchar,nvarcharntext,以及其他字符串变量char,varchartext根据set collat​​ion进行编码.我还读到上面提到的unicode选项是用utf-16变体ucs-2编写的(我希望我记得正确).所以; 为了允许locale collat​​ion和unicode表,玩得好,应该有转换函数,不是吗?

Roo*_*kie 12

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

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

发布在这里是为了帮助其他不幸的灵魂注定在黑暗中漫无目的地漫步,寻找线索.


sbi*_*biz 5

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

\n\n
SELECT Account COLLATE SQL_Latin1_General_CP1_CI_AS\nfrom Data\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

另一个解决方案可能是将您的列转换为 nvarchar

\n\n
SELECT cast (Account as nvarchar) as NewAccount \nfrom Data\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 Account 是初始表中的 varchar。

\n\n

例如,如果您尝试:

\n\n
SELECT cast(cast(N\'\xc5\xa3\' as varchar) as nvarchar)\n
Run Code Online (Sandbox Code Playgroud)\n\n

最终结果将是“\xc5\xa3”

\n