SQL数据类型:nchar,char,varchar,nvarchar 的区别和应用场景

概括:

char:固定长度,存储ANSI字符,不足的补英文半角空格。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义CHAR(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim(),比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。但正因为是固定长度,所以速度效率高。 

nchar:   固定长度,存储Unicode字符,不足的补英文半角空格,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。

varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

区别:
char,nchar 定长,速度快,占空间大,需处理
varchar,Nvarchar,TEXT 不定长,空间小,速度慢,无需处理
nchar、Nvarchar、NTEXT处理Unicode码

varchar(100)/char(100)能存50个汉字,nvarchar(100)/nchar(100)能存100个汉字。

char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

应用:

如果你肯定存储的数据长度,而且不包中文的,可以选择char类型。

如果肯定存储的数据长度,但可能包括中文,可以选择nchar类型。

如果不确定存储的数据长度,存储只有英文、数字的最好用varchar

如果不确定存储的数据长度,也有可能有中文,可以选择nvarchar类型,



posted @ 2020-01-06 10:40  灰弧兮  阅读(2392)  评论(0编辑  收藏  举报