SqlServer N字首

ForTechnology發表於2013-03-24

若要使資料庫能夠識別 Unicode,除了使用 ncharnvarcharnvarchar(max) 資料型別定義 Unicode 儲存外,還需要定義識別 Unicode 的客戶端互動。可以通過在資料庫伺服器端執行下列操作來定義識別 Unicode 的客戶端互動:

  • 在表列以及 CONVERT() 和 CAST() 操作中,將非 Unicode 資料型別轉換為 Unicode 資料型別。
  • 使用 ASCII() 和 CHAR() 函式的 Unicode 等價函式 UNICODE() 和 NCHAR() 來替換它們。
  • 以 Unicode 格式定義儲存過程和觸發器的變數和引數。
  • 以字母 N 為字首標識 Unicode 字串常量。

SqlServer <B style='color:black;background-color:#A0FFFF'>N</B>字首使用 UNICODE()、NCHAR() 和其他函式

ASCII() 函式返回所傳遞字元的非 Unicode 字元程式碼。因此,在為非 Unicode 字串使用 ASCII 函式的情況下為 Unicode 字串使用等價函式 UNICODE()。對於 CHAR 函式也是如此;NCHAR 是其 Unicode 的等價函式。

由於 SOUNDEX() 函式是基於英語拼音規則定義的,因此除非字串只包含拉丁字元 A 到 Z 和 a 到 z,否則此函式對於 Unicode 字串是沒有意義的。

ASCII、CHAR 和 SOUNDEX 可以傳遞 Unicode 引數,但這些引數被隱式轉換為非 Unicode 字串。這可能導致處理之前 Unicode 字元丟失,因為這些函式在定義時對非 Unicode 字串執行操作。

除了 UNICODE() 和 NCHAR() 函式以外,下列字串操作函式會盡可能支援 Unicode:CHARINDEX()、LEFT()、LEN()、UPPER()、LOWER()、LTRIM()、RTRIM()、 PATINDEX()、REPLACE()、QUOTENAME()、REPLICATE()、REVERSE()、STUFF()、 SUBSTRING() 和 UNICODE()。這些函式接受 Unicode 引數,為 Unicode 字串留出 2 位元組的字元邊界,並在輸入引數為 Unicode 格式時使用 Unicode 排序規則進行字串比較。

SqlServer <B style='color:black;background-color:#A0FFFF'>N</B>字首定義儲存過程中的引數

使用 Unicode 資料型別定義引數可以保證客戶端請求或輸入在伺服器上隱式轉換為 Unicode 格式,並在處理中不被損壞。如果將引數指定為 OUTPUT 引數,Unicode 型別也可以在其返回到客戶端時使損壞的機率降到最低程度。

在以下儲存過程中,變數作為 Unicode 資料型別宣告。


SqlServer <B style='color:black;background-color:#A0FFFF'>N</B>字首複製程式碼
CREATE PROCEDURE Product_Info    @name nvarchar(40)ASSELECT p.ListPrice, v.Name    FROM Production.Product p         INNER JOIN Purchasing.ProductVendor pv            ON p.ProductID = pv.ProductID          INNER JOIN Purchasing.Vendor v            ON pv.VendorID = v.VendorIDWHERE p.Name = @name;

SqlServer <B style='color:black;background-color:#A0FFFF'>N</B>字首使用 N 字首

在伺服器上執行的程式碼中(例如在儲存過程和觸發器中)顯示的 Unicode 字串常量必須以大寫字母 N 為字首。即使所引用的列已定義為 Unicode 型別,也應如此。如果不使用 N 字首,字串將轉換為資料庫的預設內碼表。這可能導致不識別某些字元。

例如,在前面示例中建立的儲存過程可以按以下方式在伺服器上執行:



EXECUTE Product_Info @name = N'Chain'

使用 N 字首的要求適用於在伺服器上生成的和客戶端傳送的字串常量。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-756955/,如需轉載,請註明出處,否則將追究法律責任。

相關文章