我一直在尝试使用SQL查询中的一些数据向JSON Web服务提供数据。我遇到的问题是数据存储为SQL Server数据库中的UTF16,我必须将其作为UTF8提供给Web服务。
我希望在SQL查询运行时使用我的SQL查询来转换数据。我一直在阅读各种论坛,并且给人的印象是没有一种特别简单的方法来进行转换。
例如,根据我的理解,我有ÖSTLUND等名称,它是有效的Unicode / Windows代码页1253.
我是否认为UFT8更像Windows代码页1252?
我尝试过各种版本的Cast和Collate,但我很难找到哪种方式能给我最好的答案。
(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和Collate是这样做的吗?
更新
该应用程序是一个用Uniface编写的旧应用程序。应用程序服务器正在运行SQL脚本以响应数据库字段更改。然后,它使用SQL输出填充Web服务帖子的有效负载。 SQL的输出符合Web服务的JSON。
答案 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。