2013-08-29 36 views

回答

32

N表示「國家字符」,表示字符串的內容爲Unicode

無論什麼時候遇到可以包含默認ASCII字符集之外的字符的專有名稱或其他實體,您都應該使用Unicode(/nvarchar)。如果您沒有用N前綴包圍這些字符串,則會丟失數據。例如:

SELECT N'ук ферт хер', 'ук ферт хер'; 

結果:

-----------  ----------- 
ук ферт хер  ?? ???? ??? 

你也應該確保使用N前綴在WHERE或其他條款對n(var)char列。當您不使用前綴N時,由於隱式轉換,您可能會遇到嚴重的性能問題。

+0

我可以獲得更多信息的鏈接嗎?我試過谷歌,但沒有得到信息。這是我得到的搜索結果 - http://stackoverflow.com/questions/3895387/whats-the-sql-national-character-nchar-datatype-really-for – Steam

+1

+1我知道這是Unicode永遠從來沒有想過弄清楚N代表什麼。 –

+1

@blasto [很多信息在這裏](http://en.wikipedia.org/wiki/Unicode)。 –

2

從書上採取更多的信息 - http://www.amazon.com/Training-Kit-Exam-70-461-Microsoft/dp/0735666059

如果你寫了涉及不同類型的操作數的表達式,SQL Server將不得不申請隱式轉換對齊類型。根據具體情況,隱式轉換有時會損害性能。瞭解不同類型文字的適當形式並確保使用正確的文字非常重要。使用不正確的文字類型的典型示例是Unicode字符串(NVARCHAR和NCHAR類型)。

Unicode字符串文字的正確形式是以大寫N爲前綴,並用單引號分隔文字;例如,N'literal'。對於常規的字符串文字,您只需用單引號分隔文字;例如,「文字」。當過濾列是Unicode類型時,指定常規字符串文字是一種非常典型的壞習慣,如下例所示。

SELECT empid, firstname, lastname 
FROM HR.Employees 
WHERE lastname = 'Davis'; 

因爲列和文字有不同的類型,SQL Server將隱式轉換 一個操作數的類型到另一個。在這個例子中,幸運的是,SQL Server將文字的類型轉換爲列的類型,所以它仍然可以高效地依靠索引。但是,可能會出現隱式轉換會損害性能的情況。使用正確的形式是最佳做法,如下所示。

SELECT empid, firstname, lastname 
FROM HR.Employees 
WHERE lastname = N'Davis';