以下查询将所需结果作为“ 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。
答案 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
上发生了这种情况。
如果是这种情况,则无法解决此问题 - 您要插入表中的任何数据都已消失,无法恢复(除非它来自您可以重新导入的文件或其他来源) )。