黑马程序员技术交流社区
标题:
关于SQL数据类型?
[打印本页]
作者:
邓建军
时间:
2013-3-30 21:51
标题:
关于SQL数据类型?
本帖最后由 邓建军 于 2013-3-31 10:46 编辑
在SQL数据类型中,char,nchar,varchar,nvarchar之间有什么区别,什么时间用哪个数据类型?非UNICODE英文字母占一个字节,其他占2个字节UNICODE中英文字母占几个字节,其他字符占几个字节 ?
作者:
曾玉锋
时间:
2013-3-30 22:02
char,varchar类型是非unicode类型,一般用于存储英文字符,占1个字节;nchar,nvarchar类型是unicode类型,一般用于存储非英文格式的字符,占一个字符。
char,nchar是长度固定的类型,如果输入的内容长度不够,则自动用空格补齐长度,所以,如果长度过长(比如超过10个字节)建议使用varchar,nvarchar
varchar,nvarchar是变长类型,会根据用户的输入自动缩减占用的空间,但对于数据长度比较短的字段(少于10个字节)的建议使用char,nchar
总之,char,nchar效率高,但浪费内存;varchar,nvarchar省内存,但效率不高。英文用char ,varchar,中文用nvarchar,nchar
作者:
张正强
时间:
2013-3-30 22:05
可以参考http://www.cnblogs.com/mekong/archive/2009/04/17/1437996.html
作者:
郑丹丹1990
时间:
2013-3-30 22:08
哇!确实是大家的迷惑之处
作者:
kelline
时间:
2013-3-30 22:24
第一个区别是char、varchar , 前者是固定长度后者是可变长度:当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度,而varchar,nvarchar变长字符数据则不会以空格填充。打个比方:你把kill 这个数据方到char(10)这种格式的定义里,你取出来的数据长度就为10, 因为其他6个为空格填充的;而如果是放到varchar(10)里取出来的仍然是4这个长度。
第二个区别是unicode和非unicode:数据库中,英文字符只需要一个字节存储,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符。
对于存储的规格:
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
CHAR
CHAR存储定长数据很方便,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
VARCHAR
存储变长数据,但存储效率没有CHAR高,如果一个字段可能的值是不固定长度的,可以定义为varchar,VARCHAR类型的实际长度是它的值的实际长度+1。这一个字节用于保存实际使用了多大的长度。
作者:
kelline
时间:
2013-3-30 22:27
要什么时候用这个很好区别: 比如你一个字段上规定性别 只有男女,那最好就是char , 比如说address这个字段你不确定有多长可以使用varchar(100)
如果数据里只有英文没有别的语言你可以使用char、varchar , 但如果有中文或者是其他的语言,为了避免乱码的问题, 就可以使用带有unicode这种编码的方式了
作者:
宋兴征
时间:
2013-3-30 23:38
实际开发中应该都用nvarchar,可变长度字符串。
char、vchar占用固定长度,在无法预测长度的情况下,如果长度超出字段定义,数据库会报截断字符串异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2