SQL 研究 相似的数据类型

最常用的数值类型是int,但是它未必是最佳选择。bigint,smallint,tinyint可以应用在特殊场合。他们的特性如下表所示:

Data type Range Storage

bigint

-2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807)

8 Bytes

int

-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647)

4 Bytes

smallint

-2^15 (-32,768) to 2^15-1 (32,767)

2 Bytes

tinyint

0 to 255

1 Byte

可见如果某一列的值只有10来个值,而你却用了int,那么没行数据多占用了3个字节。如果有1G的行数,那么你多用了3G的空间。如果它还在index中,ok,它又占用了不必要的3G。

与此类似的是Float和Real,他们的格式如下:

Data type Range Storage

float

- 1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308

Depends on the value of n

1,24=4 bytes

25,53=8bytes

real

- 3.40E + 38 to -1.18E - 38, 0 and 1.18E - 38 to 3.40E + 38

4 Bytes

需要说明的是,float的长度取决于一个参数,虽然我们通常声明的时候并不指定float的长度,实际上是存在这样的选项的。这个长度默认是53,数值范围如上表所示。

显然如果你要表示的数字不会超过10的38次方的话,你应该用real,他可以为你节省4个字节。

另一个相关的例子是decimal和numerical,他们是另一组精确表示数值的类型。float和real是不精确的,所以不能做相等的比较。

decimal和float在功能是等价的,为什么要分成两个名字,我也不清楚。

decimal的声明如下:decimal(p,s),p表示总共多少位,包括小数点前后的数字,s表示小数点后多少位,p不能超过38,当然s不能超过p,缺省是0。

decimal的范围是正负10的p-s次方的结果 减去10的-s次方。比如decimal(2,1)的范围是正负9.9。

decimal的长度和p的大小相关,如下表所示:

Precision Storage bytes

1 - 9

5

10-19

9

20-28

13

29-38

17

可使用变长字节来存放decimal。此时数据库根据实际数值的大小来存放decimal,而不是根据声明来判断。如果表中没有var length的列,那么需要额外的两个字节,否则不会有额外的需要。

可以通过如下的命令启动一个数据库上的变长decimal存储:

EXEC sp_db_vardecimal_storage_format 'AdventureWorks', 'ON' ;

通过EXEC sp_db_vardecimal_storage_format ;查看所有启动了这一功能的数据库。

通过EXEC sp_tableoption 'Sales.SalesOrderDetail', 'vardecimal storage format', 1 ;

启动对某个表的变长decimal存储。

最后再看看datetime和smalldatetime,两者都表示时间,区别如下:

datetime表达的时间更久,1753到9999,精度更高,300分之一秒,占用8个字节;

smalldatetime表达的时间较短,1900到2079,精确到分,4个字节。

通常情况下,smalldatetime是够用的。

时间: 2024-09-19 09:18:42

SQL 研究 相似的数据类型的相关文章

SQL Server 2005关于数据类型最大值

本文是SQL Server 2005关于数据类型最大值问题的解决办法的实例. 事情开始得很简单.MegaWare公司市场部门想要一个新的网站来发布文档,开发团队觉得使用SQL Server 2000数据库作为文档存储仓库会使事情变得简单.Steve是MegaWare的数据库管理员,没有看出这有什么大问题;在数据库中存储文档,而不是使用文件系统,意味着服务器需要多做一些工作,但是它也会使得备份和管理容易得多.数据库与文件系统变得不同步也应该是不可能的. 市场部门想要存储的许多文档都超过了8000个

[SQL]不要让SQLServer帮你自动转换SQL命令中的数据类型

server|sqlserver|数据|数据类型|转换 为什么不要让SQLServer帮你自动转换SQL命令中的数据类型Report Date:   2003/12/5 Prepared by:     郑昀 Article last modified on 2004-2-16 The information in this article applies to: ü         Microsoft SQL Server 2000,7.0问题陈述:有一天,执行 SELECT * FROM X

跟我学SQL:(八)数值数据类型

数据|数据类型 SQL92标准定义了若干种基本数据类型,它们是SQL数据库中各种数据类型的基础.在<字符串数据类型>一文中,我们已经详细讨论了SQL92标准所定义的字符串数据类型.现在,我们来进一步讨论数值数据类型.   你最好开始尝试使用不同数据库实现方法并在它们传递数据,这样可以加深你对数值数据类型的理解.本文将给你一个数值数据类型的概要,你可以结合你的数据库的文档资料来学习. 在字符串.数值.datetime和interval这四种数据类型中,数值型的种类最多,约束也最多.在不同数据库实

SQL Server 2000系统数据类型

MS SQL Server 2000系统数据类型:(来源于SQL查询分析器) 1bigint        从 -2^63 到 2^63-1 之间的 integer (整数)数据 2binary        定长的binary数据,最长为8,000字节 3bit        integer数据,值为1或0 4char        定长的非unicode character数据,长度为8,000个字符 5cursor        含有对游标的引用的变量或存储过程OUTPUT参数所采用的数据

select-jdbc执行sql 不支持“variant”数据类型。

问题描述 jdbc执行sql 不支持"variant"数据类型. 我一个sql查询表说明字段 select top 100 [value] from sys.extended_properties 在java中使用jdbc执行的时候总是报错,说value是一个变量类型.如下错误 Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不支持"variant"数据类型. 请问有人遇到过吗,如何解决 解决方

SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应的GIS专业理论知识. 5.其他相关知识.     SQL S

SQL Server2005的XML数据类型之基础篇

一.引言 如今,在SQL Server 2005中,XML成为第一流的数据类型.借助于基于XML模式的强类型化支持和基于服务器端的XML数据校验功能,现在 ,开发者可以对存储的XML文档进行轻松地远程修改.作为数据库开发者,许多人都必须大量地涉及XML. 如今,在SQL Server 2005中,你能以一种新的数据类型的形式把XML存储在数据库中. 事实上,在SQL Server 2000中就已经包括了一些XML特征.其中,最关键的特征是使用FOR XML语句以XML形式返回结果.SQL Ser

SQL SERVER 2000的数据类型

server|数据|数据类型 SQL SERVER 为了实现Transact-SQL的良好性能,提供了丰富的数据类型.按照对象的不同,这些数据类型可以分为以下几类: 1.整数数据类型 2.货币数据类型 3.浮点数据类型 4.数字数据类型 5.日期/时间数据类型 6.字符数据类型 7.二进制数据类型 8.双节字符数据类型 除此之外,SQL SERVER也允许在上述数据类型的基础上创建自定义数据类型.

SQL Server 2005:数据类型最大值

事情开始得很简单.MegaWare公司市场部门想要一个新的网站来发布文档,开发团队觉得使用SQL Server 2000数据库作为文档存储仓库会使事情变得简单.Steve是MegaWare的数据库管理员,没有看出这有什么大问题;在数据库中存储文档,而不是使用文件系统,意味着服务器需要多做一些工作,但是它也会使得备份和管理容易得多.数据库与文件系统变得不同步也应该是不可能的.  市场部门想要存储的许多文档都超过了8000个字节,那么很明显VARCHAR不是适合这项工作的数据类型.作为替代,TEXT