SQL Server NChar數據類型

在本教學中,將學習如何使用SQL Server NCHAR數據類型來存儲固定長度的Unicode字串數據。

要在資料庫中存儲固定長度的Unicode字串數據,請使用SQL Server NCHAR數據類型:

NCHAR(n)

在此語法中,n指定字串長度,範圍從14000NCHAR值的存儲大小是n個位元組的兩倍。

NCHAR的ISO同義詞是NATIONAL CHARNATIONAL CHARACTER,因此可以互換使用它們。

CHAR數據類型類似,只能使用NCHAR存儲固定長度的字串。如果數據值的長度是可變的,則應考慮使用VARCHARNVARCHAR數據類型。

CHAR與NCHAR比較

以下是CHARNCHAR數據類型之間的主要區別:

CHAR NCHAR
僅存儲非Unicode字元。 以UNICODE UCS-2字元的形式存儲Unicode字元。
需要1個位元組來存儲一個字元。 需要2個位元組來存儲一個字元。
存儲大小等於列定義或變數聲明中指定的大小。 存儲大小等於列定義或變數聲明中指定的大小的兩倍。
最多可存儲8000個字元。 最多可存儲4000個字元。

SQL Server NCHAR示例

以下語句是用來創建一個包含一個NCHAR列的新表:

CREATE TABLE test.sql_server_nchar (
    val NCHAR(1) NOT NULL
);

以下INSERT語句將中文漢字:"易"插入NCHAR列:

INSERT INTO test.sql_server_nchar (val)
VALUES
    (N'易');

請注意,必須在Unicode字串常量前加上字母N首碼。否則,SQL Server會將字串轉換為數據庫的默認代碼頁,這可能無法識別某些特定的Unicode字元。

如果插入長度大於列定義中指定長度的字串,SQL Server將發出錯誤並終止該語句。

例如,以下語句嘗試將包含兩個字元的字串插入test.sql_server_nchar表的val列中:

INSERT INTO test.sql_server_nchar (val)
VALUES
    (N'線上789');

SQL Server發出以下錯誤消息:

消息 8152,級別 16,狀態 13,第 1 行

將截斷字串或二進位數據。

語句已終止。

要查找val列的字元數和位元組數,可以使用LENDATALENGTH函數,如下所示:

SELECT
    val,
    len(val) length,
    DATALENGTH(val) data_length
FROM
    test.sql_server_nchar;

執行上面查詢語句,得到以下結果:

在本教學中,學習了如何使用SQL Server NCHAR數據類型在資料庫中存儲固定長度的Unicode字串。


上一篇: SQL Server數據類型 下一篇: SQL Server數據定義