SQL Server 2005数据类型char,varchar,text ,nchar,nvarchar,ntext 等学习拾遗
在数据库设计时我们常常为数据类型而烦恼,但是当你熟悉了之后就不再烦恼了,看看吧,看看对你有没有帮助。
char,varchar,text ,nchar,nvarchar,ntext 等学习拾遗,我自己收藏的啊!
看过这篇文章,主要是给大家给两个建议:
第一个建议:
微软可能会后续的SQL Server版本中移除text类型,所以从现在就应该用varchar(max) 来代替text、 用nvarchar(max)代替ntext,用binary(max)代替image. 为XML数据选择xml类型。
第二个建议:
在字段为字符串并且比较多小的时候,如果字符串全部是汉字,建议使用Nvachar,如果既有字母又有汉字并且字母偏多的话,建议使用Char或者Varchar。
接下来大家可以详细看一下:
1、varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。 2、nvarchar(n) 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。 比如:两字段分别有字段值:我和coffee ,那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。 如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar 。
3、关于他们的存储效率:
char varchar text nchar nvarchar ntext
最大存储量(byte): 8000 8000 2E31-1 8000 8000 2E31-1
编码: 非unicode 非unicode 非unicode unicode unicode unicode
存储效率: 较高 较低 较低 较高 较低 较低
最大英文数: 8000 8000 2E31-1 4000 4000 2E30-1
最大中文数: 4000 4000 2E30-1 4000 4000 2E30-1
通过上面的表可以看出:
①char 和varchar之间的差别和nchar及nvarchar之间的差别相同,char 和 nchar是定长的,而varchar和nvarchar是可变长的;不带n的存储非unicode字符,也就是英文字符占一个字节,中文字符占两个字节,相同容量,中文字符个数只有英文字符个数的一半,带n 的存储unicode字符,不管中文英文统统2个字节存储一个字符。
②关于效率方面,定长的要比不定长的高,text和ntext也是不定长的。
4、用varchar(max)代替text。
varchar的最大长度为8000,但是varchar(max)则可以存储多达2G的数据,因此其作用相当于SQL 2000中的text。但是微软可能会后续的SQL Server版本中移除text类型,从现在就应该用varchar(max) 来代替text。 用nvarchar(max)代替ntext,用binary(max)代替image. 为XML数据选择xml类型。在SQL Server 2005中,为XML数据添加了相应的数据类型,因此存储XML数据的列不需要用 varchar(max)或nvarchar(max),而应当用xml数据类型,以利用T-SQL中专门针对xml数据列的新命令,以及针对xml列的索引。
(2)datetime和smalldatetime datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。 smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
(3)bitint、int、smallint、tinyint和bit bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。 int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。 smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。 tinyint:从0到255的整数数据。
bit:1或0的整数数据。 (4)decimal和numeric 这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
Decimal为SQL Server 数据类型,属于浮点数类型。存储数据范围是:-1038~1038-1 的固定精度和小数位的数字。一个decimal类型的数据占用了2~17个字节。
希望对大家有所帮助。以后再使用过程中我还会继续完善。