的where子句中 -的 'N' 我看到這個查詢某處SQL
SELECT *
FROM HR.Employees
WHERE country <> N'JAP';
是什麼「N」是什麼意思?我不確定這是否僅對SQL服務器有效。
的where子句中 -的 'N' 我看到這個查詢某處SQL
SELECT *
FROM HR.Employees
WHERE country <> N'JAP';
是什麼「N」是什麼意思?我不確定這是否僅對SQL服務器有效。
N表示「國家字符」,表示字符串的內容爲Unicode。
無論什麼時候遇到可以包含默認ASCII字符集之外的字符的專有名稱或其他實體,您都應該使用Unicode(/nvarchar
)。如果您沒有用N
前綴包圍這些字符串,則會丟失數據。例如:
SELECT N'ук ферт хер', 'ук ферт хер';
結果:
----------- -----------
ук ферт хер ?? ???? ???
你也應該確保使用N
前綴在WHERE
或其他條款對n(var)char
列。當您不使用前綴N
時,由於隱式轉換,您可能會遇到嚴重的性能問題。
從書上採取更多的信息 - 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';
我可以獲得更多信息的鏈接嗎?我試過谷歌,但沒有得到信息。這是我得到的搜索結果 - http://stackoverflow.com/questions/3895387/whats-the-sql-national-character-nchar-datatype-really-for – Steam
+1我知道這是Unicode永遠從來沒有想過弄清楚N代表什麼。 –
@blasto [很多信息在這裏](http://en.wikipedia.org/wiki/Unicode)。 –