SQL Server输出查询到UTF8而不是UTF16

时间:2016-04-08 11:15:01

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

我一直在尝试使用SQL查询中的一些数据向JSON Web服务提供数据。我遇到的问题是数据存储为SQL Server数据库中的UTF16,我必须将其作为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。

1 个答案:

答案 0 :(得分:2)

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

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

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