设计相关网站,eroticalia wordpress,建网站要多少钱 优帮云,铜仁建设公司网站(1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间#xff0c;它们的区别在于char是定长字符数据#xff0c;而varchar是变长字符数据。所谓定长就是长度固定的#xff0c;当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面…(1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间它们的区别在于char是定长字符数据而varchar是变长字符数据。所谓定长就是长度固定的当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充使长度达到相应的长度而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据最大长度为2^31-1(2,147,483,647)个字符。 后面三种数据类型和前面的相比从名称上看只是多了个字母n它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中英文字符只需要一个字节存储就足够了但汉字众多需要两个字节存储英文与汉字同时存在时容易造成混乱Unicode字符集就是为了解决字符集这种不兼容的问题而产生的它所有的字符都用两个字节表示即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较nchar、nvarchar则最多存储4000个字符不论是英文还是汉字而char、varchar最多能存储8000个英文4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字较为方便但在存储英文时数量上有些损失。 (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的整数数据。 bit1或0的整数数据。 (4)decimal和numeric 这两种数据类型是等效的。都有两个参数p精度和s小数位数。p指定小数点左边和右边可以存储的十进制数字的最大个数p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数s必须是从0到p之间的值默认小数位数是0。 (5)float和real float从-1.79^308到1.79^308之间的浮点数字数据。 real从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中real的同义词为float(24)。 数据库定义到char类型的字段时不知道大家是否会犹豫一下到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢结果很可能是两种一种是节俭人士的选择最好是用定长的感觉比变长能省些空间而且处理起来会快些无法定长只好选用定长并且将长度设置尽可能地小另一种是则是觉得无所谓尽量用可变类型的长度尽量放大些。 鉴于现在硬件像萝卜一样便宜的大好形势纠缠这样的小问题实在是没多大意义不过如果不弄清它总觉得对不起劳累过度的CPU和硬盘。 下面开始了(以下说明只针对SqlServer有效) 1、当使用非unicode时慎用以下这种查询 select f from t where f Nxx 原因无法利用到索引因为数据库会将f先转换到unicode再和Nxx比较 2、char 和相同长度的varchar处理速度差不多后面还有说明 3、varchar的长度不会影响处理速度看后面解释 4、索引中列总长度最多支持总为900字节所以长度大于900的varchar、char和大于450的nvarchar,nchar将无法创建索引 5、text、ntext上是无法创建索引的 6、O/R Mapping中对应实体的属性类型一般是以string居多用char[]的非常少所以如果按mapping的合理性来说可变长度的类型更加吻合 7、一般基础资料表中的name在实际查询中基本上全部是使用like %xx%这种方式而这种方式是无法利用索引的所以如果对于此种字段索引建了也白建 8、其它一些像remark的字段则是根本不需要查询的所以不需要索引 9、varchar的存放和string是一样原理的即length {block}这种方式所以varchar的长度和它实际占用空间是无关的 10、对于固定长度的字段是需要额外空间来存放NULL标识的所以如果一个char字段中出现非常多的NULL那么很不幸你的占用空间比没有NULL的大但这个大并不是大太多因为NULL标识是用bit存放的可是如果你一行中只有你一个NULL需要标识那么你就白白浪费1byte空间了罪过罪过这时候你可以使用特殊标识来存放如NV 11、同上所以对于这种NULL查询索引是无法生效的假如你使用了NULL标识替代的话那么恭喜你你可以利用到索引了 12、char和varchar的比较成本是一样的现在关键就看它们的索引查找的成本了因为查找策略都一样因此应该比较谁占用空间小。在存放相同数量的字符情况下如果数量小那么char占用长度是小于varchar的但如果数量稍大则varchar完全可能小于char而且要看实际填充数值的充实度比如说varchar(3)和char(3)那么理论上应该是char快了但如果是char(10)和varchar(10)充实度只有30%的情况下理论上就应该是varchar快了。因为varchar需要额外空间存放块长度所以只要length(1-fillfactor)大于这个存放空间好像是2字节)那么它就会比相同长度的char快了。 13、nvarchar比varchar要慢上一些而且对于非unicode字符它会占用双倍的空间那么这么一种类型推出来是为什么呢对就是为了国际化对于unicode类型的数据排序规则对它们是不起作用的而非unicode字符在处理不同语言的数据时必须指定排序规则才能正常工作所以n类型就这么一点好处。 总结陈词 1、如果数据量非常大又能100%确定长度且保存只是ansi字符那么char 2、能确定长度又不一定是ansi字符或者那么用nchar 3、不确定长度要查询且希望利用索引的话用nvarchar类型吧将它们设到4004、不查询的话没什么好说的用nvarchar(4000)5、性格豪爽的可以只用3和4偶尔用用1毕竟这是一种额外说明等于告诉别人说我一定需要长度为X位的数据 这样一来生活是不是变成美好多了 转载于:https://www.cnblogs.com/fanrsh/archive/2006/08/17/479551.html