1.char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义 char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
说明一点:由于char是以固定长度的,所以速度效率高。但通常程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
2.varchar类型:varchar 的类型不以空格填满。也就是varchar变长字符数据类型与存储数据的实际长度是一致的
比如:你定义了某字段类型为char(10),而它的值是"hello"(英文字符共占用5个字节),剩下的5个字节必须要空格填满,因为char是以固定长度存在的。这样呢?感觉就是浪费了一些空间。
而要定义字段类型为varchar(20),但它的值只是"hello",那么在数据库当中实际存储的就是"hello"这5个字节,后面不以空格填满,也就是后面15个字节的空格全部释放掉,可以节约空间。
------------------------------------------------
3.nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度Unicode数据的数据类型,二者均使用UNICOD EUCS-2字符集。
nchar(n)包含n个字符的固定长度Unicode字符数据。n的值必须介于 1 与4,000 之间。字节的存储大小是所输入字符个数的两倍。
nvarchar(n) 包含 n 个字符的可变长度Unicode字符数据。n的值必须介于 1 与4,000 之间。字节的存储大小是所输入字符个数的两倍。
就是说nchar()和nvarchar都是双字节来存储数据的。只不过一个是固定长度,而另一个是可变长度。如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。
下面说说nchar()和nvarchar()
为了与其他多种字符的转换,如中文,音标等,对每个英文(ASCII)字符都占用2个字节,对一个 汉字也占用两个字节,所有的字符都占用2个字节。
比如字段类型定义为nchar(10),它的值是"你好a"(注:一个汉字两个字节,一个英文字符也是两个字节,值共占用6个字节),后面要用空格填满,以保证nchar是以固定长度存储的。
字段类型定义为nvarchar(10),它的值是"你好a"(汉字2个字节,一个英文字符也是2个字节),那么实际存储时,只占用了6个字节,后面不以空格填满。
varchar一般适用于英文和数字,nvarchar适用中文和其他字符,其中n表示Unicode常量,可以解决多语言字符集之间的转换问题
总结:
1、varchar:
可变长度的非Unicode数据,最长为8,000个字符。
2、nvarchar:
可变长度Unicode数据,其最大长度为4,000字符。
3、char:
固定长度的非Unicode字符数据,最大长度为8,000个字符。
4、nchar
固定长度的 Unicode 数据,最大长度为 4,000 个字符。
5、char和varchar都是字符串类型的用Unicode编码的字符串,结果是字符的整数值 |