2012-04-05 91 views
243

我在某些插入T-SQL查詢中看到了前綴N.在將值插入表格之前,許多人已使用NT-SQL語句中前綴N的含義是什麼?

我搜索了,但我無法理解在將任何字符串插入表之前,包含N的目的是什麼。

INSERT INTO Personnel.Employees 
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1), 

回答

300

聲明它的字符串作爲nvarchar數據類型,而不是varchar

你可能已經看到,繞過使用 一個N前綴字符串的Transact-SQL代碼。這表示後續字符串採用Unicode (N實際上代表國家語言字符集)。其中 表示您傳遞的是NCHAR,NVARCHAR或NTEXT值,因爲 與CHAR,VARCHAR或TEXT相對。

引述from Microsoft

前綴統一用字母N的字符串常量沒有 N個前綴,該字符串轉換爲 數據庫的默認代碼頁。 此默認代碼頁可能無法識別某些字符


如果你想知道這兩個數據類型之間的差異,請參閱本SO帖子:

What is the difference between varchar and nvarchar?

+1

@Curt這意味着我shuld只有當我使用以下數據類型'CHAR,VARCHAR或TEXT'時才使用'N'?因爲'NCHAR,NVARCHAR或NTEXT'本質上是存儲UNICODE,我不需要單獨添加它....這是真的嗎? – Pritesh 2012-08-04 11:23:00

+0

@Pritesh - 僅當您使用的默認代碼頁可能無法識別上面的粗體文本中的unicode字符時。 – Todd 2015-09-01 12:32:29

+4

@Curt連接到'databases aspfaq com'重定向到非常可疑的網站('fkref com','za1 zeroredirect1 com','i0z13 trackvoluum com'),它們被我們公司的防火牆標記爲色情,惡意網站和垃圾郵件網址。我已聯繫了aspfaq.com所有者並編輯了刪除鏈接的答案。 – jaume 2015-11-26 08:17:59

4

假設值是nvarchar的類型,只有我們使用N」 '

4

讓我告訴你什麼N件事的前綴發生惱人的事情。我無法修復2天。我的db歸類爲SQL_Latin1_General_CP1_CI_AS

有一張桌子。列MyCol1nvarchar的

但此查詢未能精確匹配價值存在。

SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = 'ESKİ' 

// 0 result 

使用前綴N '' 修復它

SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = N'ESKİ' 

// 1 result - found!!!! 

爲什麼呢?因爲latin1_general沒有big dotted©這就是爲什麼它失敗我想。

相關問題