SqlServer N字首
若要使資料庫能夠識別 Unicode,除了使用 nchar、nvarchar 和 nvarchar(max) 資料型別定義 Unicode 儲存外,還需要定義識別 Unicode 的客戶端互動。可以通過在資料庫伺服器端執行下列操作來定義識別 Unicode 的客戶端互動:
- 在表列以及 CONVERT() 和 CAST() 操作中,將非 Unicode 資料型別轉換為 Unicode 資料型別。
- 使用 ASCII() 和 CHAR() 函式的 Unicode 等價函式 UNICODE() 和 NCHAR() 來替換它們。
- 以 Unicode 格式定義儲存過程和觸發器的變數和引數。
- 以字母 N 為字首標識 Unicode 字串常量。
使用 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 排序規則進行字串比較。
定義儲存過程中的引數
使用 Unicode 資料型別定義引數可以保證客戶端請求或輸入在伺服器上隱式轉換為 Unicode 格式,並在處理中不被損壞。如果將引數指定為 OUTPUT 引數,Unicode 型別也可以在其返回到客戶端時使損壞的機率降到最低程度。
在以下儲存過程中,變數作為 Unicode 資料型別宣告。
複製程式碼 | |
---|---|
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; |
使用 N 字首
在伺服器上執行的程式碼中(例如在儲存過程和觸發器中)顯示的 Unicode 字串常量必須以大寫字母 N 為字首。即使所引用的列已定義為 Unicode 型別,也應如此。如果不使用 N 字首,字串將轉換為資料庫的預設內碼表。這可能導致不識別某些字元。
例如,在前面示例中建立的儲存過程可以按以下方式在伺服器上執行:
EXECUTE Product_Info @name = N'Chain' |
使用 N 字首的要求適用於在伺服器上生成的和客戶端傳送的字串常量。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-756955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 字首和的n個神奇操作
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 字首和與二維字首和
- 字首和
- 字首樹
- (Day4)字首和&二維字首和
- Python字串字首Python字串
- mysql建立字首索引MySql索引
- 最長公共字首
- 高維字首和
- 字首和&差分
- 字首和 & 差分
- mysql索引之字首索引MySql索引
- 高維字首和SOSDP
- 字首和與差分
- 組合數字首和
- 【演算法】字首樹演算法
- Golang判斷url字首Golang
- sqlserver docSQLServer
- sqlserver 拆分SQLServer
- SQLserver With As 用法SQLServer
- 輸入N,再輸入N個數,N
- Dynamics CRM實體系列之1:N、N:1以及N:N關係
- LeetCode最長公共字首(Python)LeetCodePython
- 14.最長公共字首
- 1.Prefix字首和【模板】
- 14. 最長公共字首
- 高維字首和(SOS DP)
- 淺記高維字首和
- nginx反向代理配置去除字首Nginx
- 力扣最長公共字首力扣
- 14_最長公共字首
- MySQL 字串索引和字首索引MySql字串索引
- 二維字首和&差分
- 每日leetcode——最長公共字首LeetCode
- mysql字首索引是什麼MySql索引
- 字首樹及其Java實現Java
- 11.2.0.3 :PRVG-11134 : Interface "n.n.n.n" on node "racnode1" is not able to..
- ZBlog的資料庫表是可以設定字首-修改ZBlog資料庫字首資料庫