SQL2005中char nchar varchar nvarchar數據類型的區(qū)別和使用環(huán)境講解
現在就摘錄一下sql2005聯機叢書里的關于這幾個數據類型的解釋
字符數據類型(nchar 長度固定,nvarchar 長度可變)和 Unicode 數據使用 UNICODE UCS-2 字符集。
nchar [ ( n ) ]
n 個字符的固定長度的 Unicode 字符數據。n 值必須在 1 到 4,000 之間(含)。存儲大小為兩倍 n 字節(jié)。nchar 的 SQL-2003 同義詞為 national char 和 national character。
nvarchar [ ( n | max ) ]
可變長度 Unicode 字符數據。n 值在 1 到 4,000 之間(含)。max 指示最大存儲大小為 2^31-1 字節(jié)。存儲大小是所輸入字符個數的兩倍 + 2 個字節(jié)。所輸入數據的長度可以為 0 個字符。nvarchar 的 SQL-2003 同義詞為 national char varying 和 national character varying。
備注 如果沒有在數據定義或變量聲明語句中指定 n,則默認長度為 1。如果沒有使用 CAST 函數指定 n,則默認長度為 30。
如果列數據項的大小可能相同,請使用 nchar。
如果列數據項的大小可能差異很大,請使用 nvarchar。
sysname 是系統(tǒng)提供的用戶定義數據類型,除了不以為零外,在功能上與 nvarchar(128) 相同。sysname 用于引用數據庫對象名
固定長度或可變長度的字符數據類型。
char [ ( n ) ]
固定長度,非 Unicode 字符數據,長度為 n 個字節(jié)。n 的取值范圍為 1 至 8,000,存儲大小是 n 個字節(jié)。char 的 SQL 2003 同義詞為 character。
varchar [ ( n | max ) ]
可變長度,非 Unicode 字符數據。n 的取值范圍為 1 至 8,000。max 指示最大存儲大小是 2^31-1 個字節(jié)。存儲大小是輸入數據的實際長度加 2 個字節(jié)
可變長度的偏移陣列 VarOffset 2*VarCount(每一列都要另外加上2個自己的偏移量)。所輸入數據的長度可以為 0 個字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。
備注 如果未在數據定義或變量聲明語句中指定 n,則默認長度為 1。如果在使用 CAST 和 CONVERT 函數時未指定 n,則默認長度為 30。
將為使用 char 或 varchar 的對象指派數據庫的默認排序規(guī)則,除非使用 COLLATE 子句指派了特定的排序規(guī)則。該排序規(guī)則控制用于存儲字符數據的代碼頁。
如果站點支持多語言,請考慮使用 Unicode nchar 或 nvarchar 數據類型,以最大限度地消除字符轉換問題。如果使用 char 或 varchar,建議執(zhí)行以下操作:
如果列數據項的大小一致,則使用 char。
如果列數據項的大小差異相當大,則使用 varchar。
如果列數據項大小相差很大,而且大小可能超過 8,000 字節(jié),請使用 varchar(max)。
本人測試了一下這幾個數據類型的區(qū)別,以下是測試腳本跟結果:
DECLARE @a CHAR(6)
SET @a='您啊啊啊啊是'
PRINT 'char:'+@a
DECLARE @b CHAR(6)
SET @b='abcdefg'
PRINT 'char:'+@b
DECLARE @c CHAR(6)
SET @c='123456'
PRINT 'char:'+@c
-----------------------
DECLARE @d NCHAR(6)
SET @d=N'您啊啊啊啊是'
PRINT 'nchar:'+@d
DECLARE @e NCHAR(6)
SET @e=N'abcdefg'
PRINT 'nchar:'+@e
DECLARE @f NCHAR(6)
SET @f=N'123456'
PRINT 'nchar:'+@f
------------------------------
DECLARE @g VARCHAR(6)
SET @g='您啊啊啊啊是'
PRINT 'varchar:'+@g
DECLARE @h VARCHAR(6)
SET @h='abcdefg'
PRINT 'varchar:'+@h
DECLARE @i VARCHAR(6)
SET @i='123456'
PRINT 'varchar:'+@i
--------------------------------
DECLARE @j NVARCHAR(6)
SET @j=N'您啊啊啊啊是'
PRINT 'nvarchar:'+@j
DECLARE @k NVARCHAR(6)
SET @k=N'abcdefg'
PRINT 'nvarchar:'+@k
DECLARE @l NVARCHAR(6)
SET @l=N'123456'
PRINT 'nvarchar:'+@l
結果:
char:您啊啊
char:abcdef
char:123456
nchar:您啊啊啊啊是
nchar:abcdef
nchar:123456
varchar:您啊啊
varchar:abcdef
varchar:123456
nvarchar:您啊啊啊啊是
nvarchar:abcdef
nvarchar:123456
相關文章
SQLServer2005混合模式登錄配置(用戶登錄錯誤18452,233,4064)
這篇文章主要介紹了SQLServer2005混合模式登錄配置(用戶登錄錯誤18452,233,4064),需要的朋友可以參考下2014-07-07
SQL 2005 ERROR:3145 解決辦法(備份集中的數據庫備份與現有的數據庫不同)
在圖形界面中,選擇備份文件,設置覆蓋原有數據庫,指定現數據庫文件所在的位置,選擇錯誤回滾,點擊確定2013-01-01
SQL2008中SQL應用之-鎖定(locking) 應用分析
鎖定(Locking)是一個關系型數據庫系統(tǒng)的常規(guī)和必要的一部分,它防止對相同數據作 并發(fā)更新 或在更新過程中查看數據, 從而保證被更新數據的完整性。它也能防止用戶讀取正在被修改的數據 。2011-06-06
基于SQL2005 SQL2008 表結構信息查詢升級版的詳解(含外鍵信息)
本篇文章是對SQL2005 SQL2008 表結構信息查詢升級版(含外鍵信息)進行了詳細的分析介紹,需要的朋友參考下2013-06-06

