在SQL Server中,查詢SQL Server查詢:在字符串之前的'N'是什麼意思?
SELECT custid, country, region, city
FROM Sales.Customers
WHERE region = N'WA'
什麼是 'N' where子句中的含義是什麼?我刪除它,得到相同的結果。
在SQL Server中,查詢SQL Server查詢:在字符串之前的'N'是什麼意思?
SELECT custid, country, region, city
FROM Sales.Customers
WHERE region = N'WA'
什麼是 'N' where子句中的含義是什麼?我刪除它,得到相同的結果。
的Unicode出現在服務器上執行的代碼,如存儲過程和觸發器字符串常量,必須以大寫字母N
開頭。即使被引用的列已被定義爲Unicode,情況也是如此。如果沒有前綴N
,字符串將轉換爲數據庫的默認代碼頁。這可能無法識別某些字符。
例如,在前面的例子中創建的存儲過程可以在服務器上通過以下方式執行:
EXECUTE Product_Info @name = N'Chain'
要求使用N
前綴適用於這兩個字符串常量在服務器上發起和那些從客戶端發送的信息。
它將您的文字轉換爲Unicode字符串。
爲官方的解釋參見here:
Unicode字符串具有類似於字符串的格式,但由N標識符之前(N在SQL-92標準代表國家語言)。
在很多情況下,除非您的文字包含Unicode字符,否則不會有所作爲。如果是這樣,你離開了明確的轉換,將您的Unicode字符轉換爲「?」:
select 'Ộ', N'Ộ'
---- ----
? Ộ
'N'代表國家語言,並表示要傳遞一個值NVARCHAR,NCHAR。接受非英語語言的數據類型開始N.
請記住,你是不是需要用「N」來包裝你的參數數據類型,例如VARCHAR,CHAR,因爲他們不」 t接受Unicode字符。
任何其它語言如阿拉伯語,波斯語將被認爲爲Unicode所以應該在數據類型,如被操縱NVARCHAR和值應與包裹「N」如下:
DECLARE @Name AS NVARCHAR(50);
SET @Name = N'اسم';
PRINT @Name;
這將返回:
اسم
如果你嘗試沒有 'N':
DECLARE @Name AS NVARCHAR(50);
SET @Name = 'اسم';
PRINT @Name;
這將返回
???
那是因爲你還沒有與「N」雖然數據類型爲NVARCHAR和系統不知道這個詞什麼包裹值「اسم」。