处理在SQL查询中未正确显示的Unicode字符

时间:2019-01-11 10:17:28

标签: sql sql-server

这是SQL查询:

DECLARE @objname nvarchar(255)
set @objname='漢字'
select @objname

当我在Microsoft SQL Server Management Studio中运行此查询时,得到以下信息:

??

问题:要在结果中获取汉字,我应该在SQL查询中进行任何更改吗?还是代码页等问题?

3 个答案:

答案 0 :(得分:7)

您应该使用此:

{{1}}

答案 1 :(得分:4)

Object foo;变量用NVarchar表示,因此应该是

N'<Value>

现在,输出将被设置为DECLARE @objname nvarchar(255) set @objname=N'漢字' select @objname 。运行以上代码。

答案 2 :(得分:4)

在其他答案周围添加一些上下文:

您需要使用N前缀(N代表“国家字符”)声明您的字符串分配,因为您需要明确表示要在此处传递包含Unicode字符的字符串(或nchar,ntext等)如果您使用的是这些。)

Microsoft's描述是

  

以字母N为前缀的Unicode字符串常量   信号UCS-2或UTF-16输入,取决于是否使用SC整理   是否使用。如果没有N前缀,则字符串将转换为   数据库的默认代码页可能无法识别某些   字符。从UTF-8开始的SQL Server 2019预览版开始   使用启用的归类,默认代码页可以存储   UNICODE UTF-8字符集。

因此,根据其他答案,您的作业将是set @objname = N'漢字'

您还应该注意在其他实例中使用前缀,例如在nvarchar列上进行过滤时使用where子句,否则您会遇到诸如隐式转换导致的性能下降之类的问题。