SQL Server中数据类型之char、nchar、varchar、nvarchar的用法

发布时间 2023-07-18 14:17:05作者: GU天乐乐乐!

char数据类型

char数据类型是固定长度的非unicode字符数据,如果是英文字符,占用1个字节,如果是汉字,占用2个字节。列如:char(10),可以存10个英文字母,5个汉字。

char数据类型存储固定长度数据很方便,char字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。

char数据类型因存储固定长度数据,它的缺点也是很明显,比如定义char(10),如果存的字符的个数小于10,其它空间会用空格补上,导致在查询数据时非常不方便。程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉。

 

 

Nchar数据类型

nchar数据类型对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。

例如:nchar(10),可以存10个英文字母,也可以存10个汉字,如果存的字符的个数小于10,其它空间会用空格补上。

 

varchar数据类型

varchar数据类型是可变长度非Unicode数据,例如:varchar(10),存10个字母,5个汉字。如果存的字符的个数小于10,其它空间不会用空格补上。

如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。

Varchar类型:Varchar 的类型不以空格填满,而Char则会填充满为止,如varchar(100),但它的值只是"abcd",所以它在数据库中存的值就是"abcd",而char 不一样,如char(100),它的值是"abcd",而实际上它在数据库中是"abcd "(abcd后共有96个空格,就是把它填满为100个字节)。

 

nvarchar数据类型

nvarchar数据类型是可变长度的Unicode数据。

nvarchar在SQL Server中是采用Unico来存储数据的,中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码)。

正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时,在SQL Server存储中文字符为varchar就会出现乱码(显示为??),唯一能解决问题的是把数据库字段的类型改为nvarchar或 者nchar。

使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.当然,使用nvarchar存储英文字符会增大一倍的存储空间,但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的。

 

 

这四种数据类型名字上看nchar\nvarchar比char\varchar前面多了个“n”。它表示存储的是Unicode数据类型的字符。英文字符只需要一个字节存储就足够了,但汉字需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。