黑马程序员技术交流社区

标题: 关于SQL数据类型的区别 [打印本页]

作者: 何建华    时间: 2011-11-20 23:56
标题: 关于SQL数据类型的区别
本帖最后由 何建华 于 2011-11-21 15:34 编辑

char,varchar,nchar与nvarchar有什么区别呢?我在网上查了关于他们的区别,可是还是不太明白,各位朋友帮忙用通俗的语言解释一下,谢谢!
作者: zhou_411424    时间: 2011-11-21 07:11
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编码的字符串,结果是字符的整数值
作者: 乔克    时间: 2011-11-21 08:03
1 varchar
2 nvarchar
3 char
4 nchar

说起来在纯英文下varchar char 更节省空间 实际上这点空间并不是大问题

如果一个变长字段 不确定有没有中文 用nvarchar
如果一个字段是定长的 并且没中文 用char
如果一个字段是定长的 并且是中文 用nchar
作者: 小石    时间: 2011-11-21 09:00
char比varchar操作速度快,varchar需要检测长度,速度比较慢,但是节省内存空间。
char(10)字符长度不够的话后面补“ ”但是varchar字符类型就不用补“ ”。
nchar和nvarchar表示可能含有中文,nvarchar是可变长度的Unicode数据,nchar是固定长度的Unicode数据
作者: 毕山山    时间: 2011-11-22 13:40
数据类型
        char                固定长度,char(10) 不足10个补空格,如: 张三  补6个空格
        varchar      可变长度
        nchar                固定长度 Unicode编码存储   nchar(10)不足10个补空格 如:张三 补 8个空格  一般用来存汉字
        nvarchar        可变长度 Unicode编码存储    一般用来存汉字





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2