2013-12-11 93 views
1

下面的查詢返回預期的結果爲「約翰朱亞麗」:選擇中國文字在SQL Server 2008

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發生。

如果出現這種情況,則無法解決此問題 - 無論您打算插入表中的數據是否已久,都無法恢復(除非它來自文件或其他來源,進口)。

+0

是的我有一個SQL'更新',適用於許多語言,但不是中文和日文。他們只是更新爲????。將N'加到文字上,例如N'允許直'固定它 – user1444886