【问题标题】:SQL Server Output query to UTF8 instead of UTF16SQL Server 将查询输出到 UTF8 而不是 UTF16
【发布时间】:2016-07-29 15:16:16
【问题描述】:

我一直在尝试使用来自 SQL 查询的一些数据向 JSON Web 服务提供数据。我遇到的问题是数据以 UTF16 格式存储在 SQL Server 数据库中,我必须将其作为 UTF8 格式提供给 Web 服务。

我想在 SQL 查询运行时使用我的 SQL 查询来转换数据。我一直在阅读各种论坛,并认为没有一种特别简单的方法可以进行转换。

例如,我有诸如 ÖSTLUND 之类的名称,据我所知,它是有效的 Unicode/Windows 代码页 1253。

我认为 UFT8 更像 Windows 代码页 1252 是否正确?

我尝试过各种版本的 Cast 和 Collat​​e,但我正在努力寻找哪种方式可以给我最好的答案。

    (cast(SURNAME as varchar(100)) COLLATE SQL_Latin1_General_Pref_CP1_CI_AS) 

    (cast(SURNANE as varchar(100)) COLLATE Latin1_General_100_CI_AS_KS_WS_SC)

有没有人有任何建议如何最好地做到这一点? Cast 和 Collat​​e 是否可以做到这一点?

更新:

该应用程序是用 Uniface 编写的旧应用程序。应用程序服务器正在运行 SQL 脚本以响应数据库字段更改。然后,它使用 SQL 输出填充 Web 服务帖子的有效负载。使 SQL 的输出符合 Web 服务的 JSON。

【问题讨论】:

  • 我怀疑这可能,sql-server 不支持 UTF8。也许与 CLR...
  • 如果可能的话,我会在您的 Web 服务层中进行必要的覆盖。 UTF-8 不是代码页 1252
  • 感谢 Alan,不幸的是,链接到数据库的 Web 服务相当愚蠢,它只是向外发布消息而不是进行任何处理,因此我需要在字符到达 Web 服务之前对其进行转换。
  • Web 服务现在如何进行查询以从数据库中获取数据?需要在发生通信的地方进行转换。
  • 该应用程序是用 Uniface 编写的旧应用程序。应用程序服务器正在运行 SQL 脚本以响应数据库字段更改。然后,它使用 SQL 输出填充 Web 服务帖子的有效负载。使 SQL 的输出符合 Web 服务的 JSON

标签: sql sql-server json utf-8 utf-16


【解决方案1】:

首先,Unicode 能够表示所有字符并且不需要代码页。 UTF-8、UTF-16 和 UTF-32 都是 Unicode 并且都代表所有 Unicode 字符(当然是当前映射的)。

关于这个特殊问题,SQL Server 就像 Windows 和 .NET 一样,在 Unicode 数据方面确实只适用于 UTF-16(小尾数)。如果您想要 UTF-8 格式的字符串,那么在从结果集中的 SQL Server 取回数据后,您可以将它们编码为 UTF-8,因为您正在将其打包成 JSON 格式。所以听起来它必须在“Uniface”中完成。

此外,关于问题中的两个 CAST 语句,它们实际上做了同样的事情,因为两者都使用 Latin1 语言环境/LCID,它映射到代码页 1252 以获取 VARCHAR 数据。

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 2013-05-29
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多