在SQL Server 2008中选择中文字符

时间:2013-12-11 05:59:34

标签: sql sql-server

以下查询将所需结果作为“ John朱亚丽”返回:

DECLARE @FIRST_NAME nvarchar(30),@LAST_NAME nvarchar(30)
SET @FIRST_NAME=N'John'
SET @LAST_NAME =N'朱亚丽'
SELECT @FIRST_NAME + ' ' + @LAST_NAME 

然而,当我将其更改为以下(我已经删除引号前的N)时,我得到的结果为 John ???

DECLARE @FIRST_NAME nvarchar(30),@LAST_NAME nvarchar(30)
SET @FIRST_NAME='John'
SET @LAST_NAME ='朱亚丽'
SELECT @FIRST_NAME + ' ' + @LAST_NAME 

现在我知道unicode角色以及为什么我们需要N''。但是当我从数据库列中选择一些中文字符时,我遇到了问题。列被定义为NVARCHAR并存储中文字符,但当我在表格上运行一个简单的选择时,字符显示为问号。

我该如何解决这个问题?我在列之前附加了任何函数或字符(或上例中的变量)吗?

SQL SERVER的版本是2008 R2。

1 个答案:

答案 0 :(得分:4)

插入数据时可能会丢失数据(因为它之前没有N前缀)。例如:

DECLARE @x TABLE(ID INT IDENTITY(1,1), n NVARCHAR(32));

INSERT @x SELECT N'朱亚丽';
INSERT @x SELECT '朱亚丽';

SELECT ID, n FROM @x;

结果:

1    朱亚丽
2    ???

根据您的描述,我严重怀疑SELECT上发生了这种情况。

如果是这种情况,则无法解决此问题 - 您要插入表中的任何数据都已消失,无法恢复(除非它来自您可以重新导入的文件或其他来源) )。