数据类型及其详解1

                数据类型及其详解
在这里我收集了七大类数据类型,分别介绍如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  精确数字数据类型

精确数字数据类型用来存储没有小数位或有多个小数位的数值。使用任何算术运算符都可以操纵这些数据类型中存储的数值,而不需要任何特殊处理。精确数字数据类型的存储也是精确定义的。下表列出了SQL Server支持的精确数字数据类型。
  精确数字数据类型
数据类型
存储
值域
作用
bigint
8 字节
-2E63 2E63-1
存储非常大的正负整数
int
4 字节
-2E31 2E31-1
存储正负整数
smallint
2 字节
-32 768 32 767
存储正负整数
tinyint
1 字节
0 255
存储小范围的正整数
decimal(p,s)
依据不同的精度,需要 5 17 字节
-10E38+1 10E38-1
最大可以存储 38 位十进制数
numeric(p,s)
依据不同的精度,需要 5 17 字节
-10E38+1 10E38-1
功能上等价于 decimal ,并可以与 decimal 交换使用
decimalnumeric数据类型接受参数来完成数据类型定义。这些参数定义数据类型的精度和小数位数。例如,decimal(12,4)定义了一个总共有12位数字的十进制值,其中小数点后面有4位数字。
在这组数据类型中,intdedcimal是最常用的数据类型。使用decimal数据类型可以存储整型值,但这么做每行需要额外的存储字节,因此不要这么使用decimal数据类型。如果在一个列中打算存储的值的范围不超过32767,则通过使用smallint代替int,每行可以节省2个字节。如果取值范围只是在0255之间,则通过使用tinyint数据类型,每行可以节省3个字节。
重要提示 空间利用率

每行节省23个字节的存储空间,相对于花几百元就能买到250 GB以上的硬盘来说并不算什么。然而,硬盘存储并不存在问题。如果在一个表中存储10万行数据(这是很常见的),则每行节省的字节总起来可达23 MB。虽然这个数字看上去没有什么,但考虑到如果用户执行一个返回该表中的所有行的查询,不仅可以节省同样多的内存空间,而且还可以节省上千个处理器周期。

如果把两个表连接起来,空间问题就更大了。把两个int列连接起来将消耗8个字节的内存空间,以及相应的处理器计算次数。如果两个表都有10万行数据,并且需要全部读出来,则该操作大约使用8 MB内存空间。如果把数据存储在一个smallinttinyint列中,则本次查询可以节省46 MB内存,而且这仅仅是一次查询节省的内存。想想对该数据库执行几千次查询会出现的情况,就不难明白,每行由于使用了合适的数据类型而节约的12个字节,很快就能区分出性能良好的环境和性能低劣的环境。

  近似数字数据类型

近似数字数据类型可以存储十进制值。然而,floatreal数据类型中存储的数据,只能精确到数据类型定义中指定的精度。不能保证小数点右边的所有数字都被正确存储。例如,如果把1.00015454存储在一个定义为float(8)的数据类型中,则该列只能保证精确地返回1.000154SQL Server存储数据时对小数点右边的数进行四舍五入。因此,涉及这些数据类型的计算,会出现舍入误差。在Intel处理器和AMD处理器之间传输包含涉及这些数据类型的表的数据库时,也会引入误差。下表列出了SQL Server支持的近似数字数据类型。

  近似数字数据类型
数据类型
存储
取值范围
作用
float(p)
4 8 个字节
-2.23E308 2.23E308
存储大型浮点数,超过十进制数据类型的容量
real
4 个字节
-3.4E38 3.4E38
仍然有效,但为了满足 SQL-92 标准,已经被 float 替换了
float数据类型在定义时接受一个参数,该参数决定了精确存储的位数。例如,一个float(8)列精确存储7位数字,任何超过该数的位数都会遭遇舍入误差。
  货币数据类型

货币数据类型旨在存储精确到4个小数位的货币值。下表列出了SQL Server支持的货币数据类型。
  货币数据类型
数据类型
存储空间
取值范围
作用
money
8 字节
-922 337 203 685 477.5808
922 337 203 685 477.5807
存储大型货币值
smallmoney
4 字节
-214 748.3648 214 748.3647
存储小型货币值
在数据库中几乎不定义smallmoney数据类型,尽管对很多处理产品和订单的应用程序而言,这种数据类型是最精确的选择。由于不正确地使用了money数据类型,使每行数据浪费了4个字节的存储空间,这种情况是比较普遍的。
虽然moneysmallmoney数据类型旨在存储货币值,但在金融应用程序中几乎不使用它们。相反,这些应用程序使用decimal数据类型,因为它们需要执行精确到6个、8个甚至12个小数位的计算。
  日期和时间数据类型

在存储数据时,没有什么比确定日期和时间的存储方式更能引起争议了。一些应用程序只需存储日期,另一些应用程序只需存储时间,还有一些应用程序需要同时存储日期和时间。不幸的是,SQL Server只是把这类数据作为日期和时间存在一起——例如,2010-03-09 20:53:36.153。下表列出了SQL Server支持的日期和时间数据类型。
  日期和时间数据类型
日期类型
存储空间
取值范围
作用
datetime
8 字节
January 1, 1753 December 31,9999 ,精度为 3.33 毫秒
存储大型日期和时间值
smalldatetime
4 字节
January 1, 1900 June 6, 2079 ,精度为 1 分钟
存储较小范围的日期和时间值
datetimesmalldatetime数据类型在计算机内部是作为整数存储的。datetime数据类型存储为一对4字节整数,它们一起表示自175311日午夜12点钟经过的毫秒数。前4个字节存储日期,而后4个字节存储时间。smalldatetime数据类型存储为一对2字节整数,它们一起表示自190011日午夜12点钟经过的分钟数。前两个字节存储日期,后两个日期存储时间。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值