是否可以让 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 服务器通过 nchar
、nvarchar
和 ntext
提供了一个 unicode 选项,并且其他字符串变量 char
, varchar
和 text
根据设置的排序规则进行编码。我还读到上面提到的 unicode 选项是用 utf-16 变体 ucs-2 编码的(我希望我没记错)。所以;为了让 locale collation 和 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
张贴在这里是为了帮助其他注定要在黑暗中漫无目的地游荡、寻找线索的不幸灵魂。
在我正在处理的一个项目中,我的数据存储在 SQL 服务器中,排序规则 Danish_Norwegian_CI_AS
。数据通过 FreeTDS 和 ODBC 输出到 python,将数据作为 UTF-8 处理。一些字符,如 å、ø 和 æ,编码不正确,导致项目进度陷入停顿。
我花了几个小时阅读有关编码、整理和代码页的混乱世界,感觉我对整个画面有了更好的理解。
我读过的一些文章让我认为可以: 在 SQL select 语句中指定,当它被输出了。
我认为这是可能的原因是 this article 它展示了一个示例,说明如何使用不同的排序规则进入表格,一起玩得很好。
任何关于将排序规则转换为 UTF-8/UTF-16 的指示,将不胜感激!
编辑:我读到 SQL 服务器通过 nchar
、nvarchar
和 ntext
提供了一个 unicode 选项,并且其他字符串变量 char
, varchar
和 text
根据设置的排序规则进行编码。我还读到上面提到的 unicode 选项是用 utf-16 变体 ucs-2 编码的(我希望我没记错)。所以;为了让 locale collation 和 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
张贴在这里是为了帮助其他注定要在黑暗中漫无目的地游荡、寻找线索的不幸灵魂。