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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋东东 中级黑马   /  2013-10-30 14:44  /  2049 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蒋东东 于 2013-10-30 22:04 编辑

这两天看数据库视频时,老师讲这三个类型区别。char和varchar是明白了,但varchar、nvarchar视频中说varchar存英文,nvarchar存汉字?varchar不是也能存汉字么?感到有点疑惑,求解啊。。。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

5 个回复

倒序浏览
varchar,nvarchar的区别是nvarchar可以存特殊字符(如韩语,日语等),而varchar不行

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
1, char:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。
2, Varchar类型::变长型字符数据类型,存储最长长度为8,000 个字符。Varchar的类型不以空格填满,比如varchar(100),但它的值只是"haha",则它的值就是"haha"。而char 不一样,比如char(100),它的值是"haha",而实际上它在数据库中是"haha"(haha后共有96个空格,就是把它填满为100个字节)。由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
3, nvarchar:  包含   n   个字符的可变长度   Unicode   字符数据。n   的值必须介于   1   与   4,000   之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar   在   SQL-92   中的同义词为   national   char   varying   和   national   character   varying。
4, 对于varchar来说,一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量,可以解决多语言字符集之间的转换问题。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
首先我给你解释一下这四种类型的含义:
1.char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。

2.varchar类型:存储变长数据,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。

Nchar类型和Nvarchar类型:了与其他多种字符的转换,如中文,音标等,所以这两种类型的数据库存储不管是英文还是汉字都占有两个字符,

通过上述的概念就可以解释你说的 varchar存英文,nvarchar存汉字,但是实际上varchar也可以存汉字的疑问了,答案就是:

     varchar类型的数据在数据库中是对于英文是以一个字节存储的,而汉字是以两个字节存储的,那么就导致varchar最多可以存8000个英文,4000个汉字,而这个nvarchar存汉字的意思是说只要你某一个字段的类型被声明成nvarchar ,那么不管你实际数据存的是什么(不管英文还是汉字),数据库都是按照汉字的字节数存储的,因此对于nvarchar类型不管是汉字还是英文最多都只能存储4000个长度的值。由此可以看出来 视频上说的varchar存英文,nvarchar存汉字不是指实际存的什么样的值,而是指在数据库中他们是以什么方式存储的

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报 1 0
varchar和nvarchar都是变长字符串。
nvarchar是声明用Unicode格式,可以保证放中文的时候不会乱码。
varchar是默认格式,一般也支持中文,但根据服务器配置不同,有时候中文就乱码了。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
黑飞马 发表于 2013-10-30 17:38
首先我给你解释一下这四种类型的含义:
1.char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节 ...

谢谢,说的真好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马