当前位置:  数据库>sqlserver

SQL 研究 相似的数据类型

    来源: 互联网  发布时间:2014-09-05

    本文导语:  最常用的数值类型是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,14...

最常用的数值类型是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是够用的。


    
 
 

您可能感兴趣的文章:

  • 如何将java.util.Date类型的日期转换成java.sql.Date类型的日期?
  • 请问SQL中的datetime类型于java中什么类型对应?
  • Access 数据类型与 MS SQL 数据类型的相应
  • Sql学习第一天——SQL 将变量定义为Table类型(虚拟表)
  • 对面的大虾看过来:sql到java的类型转换?
  • sql使用cast进行数据类型转换示例
  • SQL 时间类型的模糊查询
  • sql语法中什么类型的值需要用单引号‘’修饰?
  • 怎样把String转换成int?怎样获得系统时间并转换成java.sql.date类型?
  • java.sql.SQLException: 类型长度大于最大值 是什么意思?在线给分
  • 如何获得系统时间,类型为java.sql.Timestamp
  • 如何成功读取并显示SQL数据库中image类型字段?
  • SQL中函数 replace 的参数1的数据类型ntext无效的解决方法
  • Sql Server 数据类型转换的两个函数
  • jsp中在oracle中查询日期类型时sql语句该怎么写啊?
  • 很奇怪,varchar2类型在sql*plus中可以看到正常的字符串,用java读出来却是二进制?
  • SQL 判断字段类型语句
  • JSP不支持MS SQL Server bigint类型?
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • SQL 时间类型的模糊查询的小例子
  • SQL Server 2008如何进行数据库分离和附加详细介绍
  • sql server 删除表1某些数据的同时自动删除表2的相关数据的sql代码
  • 取数据库前几条数据(sql server、oracle、mysql)的sql写法
  • 查询SQL Server中所有数据库的数据文件位置的sql脚本
  • SQL Server数据库的修复SQL语句
  • 使用php语句将数据库*.sql文件导入数据库
  • 如何实现连接一次数据库,提交多个sql语句。(sql的批处理)
  • sql2005 大数据量检索分页的sql代码
  • t-sql/mssql用命令行导入数据脚本的SQL语句示例
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • jsp jdbc为什麽不能把数据insert到sql server 中,也不能从sql server中提取数据?!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍
  • SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)
  • java命名空间java.sql接口rowid的类成员方法: tostring定义及介绍
  • SQL客户端管理工具 SQuirreL SQL Client
  • java命名空间javax.sql.rowset接口joinrowset的类成员方法: getwhereclause定义及介绍
  • 如何处理此错误:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有执行可选特性
  • java命名空间java.sql接口statement的类成员方法: execute定义及介绍
  • 微软网站下载的Ms SQL Server2000 JDBC Driver,必须用英文版的SQL server2000吗?
  • java命名空间java.sql接口resultset的类成员方法: getcursorname定义及介绍
  • 安装SQL2008时提示删除SQL2005Express工具的解决方法
  • java命名空间java.sql接口resultsetmetadata的类成员方法: getcolumntype定义及介绍
  • 创建 sql server 链接服务器的sql代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3