A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵威 于 2013-4-29 09:09 编辑

在Sql Sever数据库中,建表的时候经常用到char,varchar,nvarchar来定义列的数据类型,有时候只是机械性的去定义,但这三者到底有什么区别,什么时候用哪个啊,求解答????

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

5 个回复

正序浏览
1. char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。
2. VARCHAR存储变长数据,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
   Varchar类型:Varchar 的类型不以空格填满,而Char则会填充满为止,如varchar(100),但它的值只是"tom",所以它在数据库中存的值就是"tom",而char 不一样,如char(100),它的值是"tom",而实际上它在数据库中是"tom "(tom后共有96个空格,就是把它填满为100个字节)。
注:由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
3. varchar(n):变长型字符数据类型,存储最长长度为8,000 个字符
  nvarchar(n):可变长度 Unicode 数据,其最大长度为 4,000 字符.字节的存储大小是所输入字符个数的两倍,就是说它是双字节来存储数据的。如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。
  varchar一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量,可以解决多语言字符集之间的转换问题。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
char(n):固定长度为n,如果不够则补满;
varchar(n):最大长度为n
nvchar:有中文的时候使用,类似char一样的效果。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
根据我的理解,用简单的语言给你描述一下:
char(n), 你定义它为多长,它是多长,你没有用满,它会给你补满;它是固定空间的
varchar(n),你定义多长,只要不超过你定义的长度,它会把你没用到的空间给释放掉,具有伸缩性;
nchar,nvarchar,分别对应char,varchar,只是如果你输入的内容有中文,就用nchar或nvarchar定义

就这么简单 ,希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
数据库中只有nchar和nvarchar这俩种!没有你说的char数据类型,这个是C#中的!nchar和nvarchar的区别在于,nchar在数据库里面一般默认的为nchar(10)意思是这个最多输入10个字符,其次还有重要的一点就是,如果你输入的不够10个话,数据库会默认用空格帮你补全,补成10位!而nvarchar则不会,你的字符串输入的长度是多少,他就是多少!

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
char
char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。
当你输入的字符大于指定的数时,它会截取超出的字符。

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

varchar[(n)]  
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。
存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

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

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


评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马