char、varchar、nvarchar数据类型的区别

1. char

     固定长度,最长n个字符。

     优点:CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

2. varchar

     最大长度为n的可变字符串。(n为某一整数,不同数据库,最大长度n不同)

     char和varchar区别:

     varchar必char节省空间,但在效率上比char稍微差一些。

     说varchar比char节省空间,是因为varchar是可变字符串,比如:用varchar(5)存储字符串“abc”,只占用3个字节的存储空间,而用char(5)存储,则占用5个字节(“abc  ”)。

     说varchar比char效率稍差,是因为,当修改varchar数据时,可能因为数据长度不同,导致数据迁移(即:多余I/O)。其中,oracle对此多余I/O描述的表达是:“行迁移”(Row Migration)。

“行迁移”(Row Migration):

      “当一行的记录初始插入时是可以存储在一个block中的,由于更新操作导致行增加了,而block的自由空间已经完全满了,这个时候就产生了行迁移。在这种情况下,oracle将会把整行数据迁移到一个新的block中,oracle会保留被迁移的行的原始指针指向新的存放行数据的block,这就意味着被迁移行的ROW ID是不会改变的。"

3. nvarchar

     nvarchar的特性,需要和varchar对比。

     nvarchar和varchar的不同主要是在对于数据的存储方式上:

     1). varchar:按字节存储数据

          varchar(6),最多能存储6个字节的数据,比如:“哈哈哈”,“abcdef”......

备注:一个中文字符在数据库里占多少个字节,要看unicode的编码方式,比如:utf8在mysql上占3个字节,sqlserver的Chinese_PRC_CI_AS占2个字节...

     2). nvarchar:按字符存储数据

          nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈",“abcdef”......

          nvarchar(m)最大存储的实际字节长度=n*m(n跟据编码方式而定),如果nvarchar存储的是英文字符,也是根据编码方式存储n的字节长度。也就是说,如果用nvarchar存储英文字符,会浪费一半以上的存储空间....

总结:

     1. char和varchar的性能差距是很小的,可以考虑忽略不计。

     2. 在大数据量应用中,使用char和nvarchar有可能导致大量的存储空间的浪费。

猜你喜欢

转载自blog.csdn.net/qq_38481055/article/details/86433124