2013-01-16 14 views
22

我產生這樣的SQL腳本,N'在SQL腳本中代表什麼? (在插入腳本字符之前使用的)

INSERT [dbo].[TableName] ([Sno], [Name], [EmployeeId], [ProjectId], [Experience]) 
VALUES (1, N'Dave', N'ESD157', N'FD080', 7) 

我不知道什麼是N」恰恰意味着什麼以及其目的在這裏。

備註:通過搜索答案,我可以得到的是N'是國家語言標準的前綴和它使用Unicode數據。但老實說,我無法在這裏清楚地知道N'的確切操作。我會很感激你的幫助,請在可以理解的的方式。提前致謝。

+0

其他的答案似乎已經掩蓋它,但以防萬一你想,這裏的如果您想了解更多信息,請參閱[documentation](http://msdn.microsoft.com/zh-cn/library/ms179899.aspx)。 (我假設你使用的是SQL Server) –

回答

20

N用於指定一個unicode字符串。

這裏有一個很好的討論http://databases.aspfaq.com/general/why-do-some-sql-strings-have-an-n-prefix.html

在您的例子N前綴不是必需的,因爲ASCII字符(值小於128)直接映射到Unicode。然而,如果你想插入一個不是ASCII的名字,那麼需要前綴N

INSERT [dbo].[TableName] ([Sno], [Name], [EmployeeId], [ProjectId], [Experience]) 
VALUES (1, N'Wāhi', 'ESD157', 'FD080', 7) 
+0

我剛剛嘗試了你所描述的示例輸入。有用!!感謝讓我瞭解其中的差異,只是出於好奇,我可能知道在什麼情況下需要這樣的輸入,我的意思是實時要求.. –

+0

在世界其他地方(美國和英國以外)名稱可以包含更多不僅僅是AZ字符。正如我的例子,Wāhi是一個毛利人的名字。看看'a'上的macron。 –

+1

亞我注意到了。當我在插入命令中使用前綴N'嘗試它時,它插入原樣(Wāhi)。但是,當我試圖沒有N'只有瓦希插入相同。這就是我的理解。 –

1

N是指定它的一個字符串類型值。

[N]'tsql_string'

是一個常量字符串。 tsql_string可以是任何nvarchar或varchar數據類型。如果包含N,則字符串將被解釋爲nvarchar 數據類型。

+0

該類型也可能是NTEXT。 – DocMax

+0

@DocMax - 實際上,如果它超過8000字節,它將是'nvarchar(max)'。 –

+0

用於表示將文本視爲unicode的字符串文字。 –

6

"N"前綴代表SQL-92標準中的國家語言,用於表示unicode字符。

無論何時您將Unicode數據傳遞給SQL Server,您都必須在Unicode字符串前添加N

它用於當類型從NVARCHAR,NCHARNTEXT

欲瞭解更多信息請參閱本:What’s up with the N in front of string values?

2

這表示隨後的字符串是Unicode的N個實際上代表國家語言字符集)。

這意味着要傳遞一個NCHARNVARCHARNTEXT價值,而不是CHARVARCHARTEXT

+0

非常感謝您的回覆。 –

4

'abcd'是文字的[var]char字符串(或者text,但varchar(max)會比較常見的現在) - 佔用4字節的內存,並使用任何代碼頁的SQL服務器配置。N'abcd'是字符串n[var]char字符串(或者可能是ntext,但nvarchar(max)將是更可取的),使用UTF-16佔用8個字節的內存。這允許全面的國際使用,坦率地說,n[var]char可能應該是大多數系統的默認設置。

+0

作爲文字,它們永遠不會被解釋爲「text」或「ntext」。它們可能用於填充這種類型的變量或列,但這在技術上是一個單獨的轉換。他們被記錄爲生成'(max)'變體。 –

+0

@Damien_The_Unbeliever「...是一個字面...」 –

0

每個國家都有自己特定的字母和符號,以便數據庫設置爲英語美國不會承認£的象徵符號,一個英語英國數據庫會,同樣也適用於西班牙語,法語,德語

而且其他語言如中文,日文,希伯來文,阿拉伯文不使用任何拉丁字符。

因此,如果您嘗試輸入任何未包含在本地字符集中的數據,將會失敗或遭受數據損壞,如果您使用的是varchar,那麼如果您的數據庫需要支持多個本地字符集,那麼你必須使用國有化語言字符集aka unicode aka NChar,它允許字符集國籍與字符一起記錄。提供國際文本支持

同樣將N-前綴字符串指示數據庫以包括國家代碼和字符代碼

+0

作爲一個側面說明,我聽說它認爲,由於相對便宜的存儲這些天不再有任何理由不使用NChar和NVarchar ,我不確定我是否同意他們,但我也不反對 – MikeT

相關問題