数据库中的char、varchar、nvarchar类型

由于对框架技术和工具越来越强的依赖,进行数据库设计时我们经常会忽略最开始的一些基本设计理论和原则,比如忽略char, varchar类型的一些细节。

在这里我想对他们做个简单的分析,如果有不对的地方希望大家指教。

1.char类型
char主要用于存储定长数据,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()
2.varchar类型
varchar(n)指长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

varchar可以保存可变长度的字符串,但存储效率没有char高,对于那些难以估计确切长度的数据对象来说,使用varchar数据类型更加明智,使用varchar型字段时,你不需要为剪掉你数据中多余的空格而操心,而且它可以比CHAR型字段占用更少的内存和硬盘空间,当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要.

varchar在存储值方面使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。

注:char,varchar 最多8000个英文,4000个汉字

3.nvarchar类型
nvarchar(n)指包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

注:nchar,nvarchar 可存储4000个字符,无论英文还是汉字

4.char、varchar、nchar、nvarchar等类型的区别
这里写图片描述

注:Unicode字符集是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。