【发布时间】:2015-07-28 15:40:43
【问题描述】:
在我正在处理的项目中,我的数据存储在 SQL Server 中,排序规则为 Danish_Norwegian_CI_AS。数据通过 FreeTDS 和 ODBC 输出到以 UTF-8 格式处理数据的 python。一些字符,如 å、ø 和 æ,没有正确编码,导致项目进度停滞不前。
我花了几个小时阅读关于编码、整理和代码页的混乱世界,感觉我对整个画面有了更好的理解。
我读过的一些文章让我觉得有可能: 在 SQL select 语句中指定排序数据在输出时应编码为 UTF-8。
我认为这是可能的原因是this article,它展示了如何使用不同排序规则的表格来一起玩的示例。
任何将排序规则转换为 UTF-8 / UTF-16 的指针,将不胜感激!
编辑:我已经读到 SQL Server 通过nchar、nvarchar 和 ntext 提供了一个 unicode 选项,并且其他字符串变量 char、varchar 和 text 是根据设置编码的整理。我还读到上面提到的 unicode 选项是用 utf-16 变体 ucs-2 编码的(我希望我没记错)。所以;为了让locale collation和unicode的表能很好玩,应该有转换功能吧?
【问题讨论】:
-
在使用 mySQL 和 jdbc 时遇到了类似的问题,这解决了我的问题。使用
create table a(.....) DEFAULT CHARSET=utf8;创建表并使用'"jdbc:mysql://localhost/testDb?useUnicode=true&characterEncoding=UTF-8";连接到数据库所以我认为MS SQL 服务器必须有一种方法 -
@SkarosIlias 感谢您的意见。不幸的是,该表已经创建并填充,所以这不是我的选择。
-
尝试使用新表并插入一些测试数据以确保其正常工作。如果它确实执行
alter table -
您可以将每个字段的编码排序规则放在 SqlServer 中。因此,您需要使用备用编码的第二个字段。我会在内存临时表中执行此操作,并在两个字段上进行显式排序。这两个字段中的数据可能看起来相同,但其中一个具有不同的排序规则。如果这可行,那么您可以微调更多。此外,我会尝试在客户端独立于 Sql 更改编码类型。从 UTF-8 到二进制到丹麦挪威语。
-
@SkarosIlias 那么有可能改变整个表格吗?问题在于我们的 ERP 系统使用了该数据库。所以更改编码不是一个选项:S 我必须从整理表中获取输出,如 utf-8 或 utf-16 ..
标签: sql-server unicode utf-8 collation pyodbc