char* 大小_SQL Server中char, nchar, varchar和nvarchar数据类型有何区别
當問及CHAR,VARCHAR,NCHAR和NVARCHAR這些數據類型之間的差異時,這個看似很簡單,但有時您也會感到困惑。
要在數據庫存儲字符、數值和特殊字符可以使用這4種數據類型,那么這4種數據類型有什么不同呢?
- CHAR vs VARCHAR
- NCHAR vs NVARCHAR
通過例子,我們將逐一研究它們。
DECLARE @string CHAR(20) SET @string = 'Robin' SELECT @string AS 'String', DATALENGTH(@string) AS 'Datalength' , LEN(@string) AS 'Len'注意:LEN()方法計算的長度不包括字符串尾隨空格的字符長度,而DATALENGTH()方法它是計算字符串表達式中字符占用的字節空間數。
如您所知,我們用單引號表示字符值,例如'Robin'。但是您知道我們也可以用雙引號來表示這些相同的字符,就像編程語言中表示字符串一樣,例如“Robin”,這可以通過以下設定來實現:
SET QUOTED_IDENTIFIER OFF默認情況下,它被設置為ON。
CHAR vs VARCHAR
關于CHAR數據類型:
如果提供給CHAR數據類型的變量的字符長度值比聲明變量要短,那么該值將被右填充空格以匹配列長度的大小。
DECLARE @string CHAR(20) SET @string = 'Robin' SELECT @string AS 'String', DATALENGTH(@string) AS 'Datalength' , LEN(@string) AS 'Len'正如您在上面看到的,盡管字符的長度為5,但變量所占用的字節數為20,這意味著不管該變量中存儲的字符是什么,它都將占用預先定義的字節來存儲值。
關于VARCHAR數據類型:
正如您在上面看到的,它的長度顯示為5,這意味著它只是占用實際變量長度的字節數,這樣可避免浪費數據庫空間。
注意:如果在執行CREATE TABLE或ALTER TABLE時,設定ANSI_PADDING為OFF,則定義為NULL的CHAR列將被視為VARCHAR。
那我們該什么時候使用什么?
如果您預先能知道要使用的列它就是固定長度,那么就使用CHAR數據類型,如果數據可能發生變化,則使用VARCHAR。
NCHAR vs NVARCHAR
關于NCHAR數據類型:
正如您在上面看到的,數據長度列顯示40字節,盡管聲明的大小是20,這是因為NCHAR為每個字符保留2字節的空間。
關于NVARCHAR數據類型:
在上圖的輸出結果中,您可以看到DATALENGTH列長度是10,這是因為它為每個字符占用2字節的空間,而數據長度只有5個字符,因此它將在數據庫中占用10字節的空間。
那我們該什么時候使用什么?
如果您的列將存儲固定長度的Unicode字符,如法語、阿拉伯語等字符,那么使用NCHAR,如果存儲列數據是Unicode,并且長度可以變化,那么使用NVARCHAR。
總結
下圖已完整了列出了這4種類型的區別。
查詢NCHAR或NVARCHAR要比查詢CHAR或VARCHAR慢一些,所以不要用NCHAR或NVARCHAR來存儲非unicode字符,即使這種數據類型支持這一點。
這篇文章只是為了讓您了解CHAR、VARCHAR、NCHAR和NVARCHAR數據類型之間的差異,因為它們都用于存儲字符、數字或特殊字符。
感謝您的閱讀,碼字不易,如果覺得對您有幫助,記得給我點個贊和關注哦!
總結
以上是生活随笔為你收集整理的char* 大小_SQL Server中char, nchar, varchar和nvarchar数据类型有何区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 判断图片是否损坏_检查图片
- 下一篇: 计算机学报格式_如何快速写好一篇格式正确