( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
2016-06-13 11:43
429 查看
(
转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
一。类型比较bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,存储大小为 8 个字节。一个字节就是8位,那么bigint就有64位
int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据,存储大小为 4 个字节。int类型,最大可以存储32位的数据
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据,存储大小为 2 个字节。smallint就是有16位
tinyint:从0到255的整数数据,存储大小为 1 字节。tinyint就有8位。
二。注释
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在
SQL Server 中,int 数据类型是主要的整数数据类型。
在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为bigint。
三。总结
所以选择最恰当的数据类型是非常重要的,例如,给你10个18位的全是数字的身份证号码,和10个15位的全是数字的身份证号码。让你以最快的查询的速度查找出来,这20个记录,那么你在设计这个字段的时候,应该有几个地方要注意:
1. 最快的查询速度,无非我们选择int类型的数据来存储这20个身份证号码。但是15位和18位的数据貌似只有bigint才满足条件。
2. 有人要说为啥不用varchar或者char呢。直接存成一个字符串。这个问题问的比较好,首先,int的查询速度肯定比varchar和char要快,那么int类型的数据是首选,但是int在sqlserver中有好几种。这个就要选择最恰当的数据类型。
code:
select STUFF((master.dbo.fn_varbintohexstr( cast( --这是主要功能实现代码 ,其他代码的作用就是将前边的 0x 去掉 CONVERT(bigint, 17)
as binary(1) --'1'表示生成的16进制数的长度为2的'1'次方个,也就是最大为 FF ) ) COLLATE Latin1_General_CI_AS_KS_WS ),1,2,'')
结果: 11
-- By Aaron West, 5/4/2005 -- This version allows negative numbers CREATE FUNCTION dbo.HexToINT ( @Value VARCHAR(8) ) RETURNS INT AS BEGIN if @Value LIKE '%[^0-9A-Fa-f]%' RETURN NULL DECLARE @I BIGINT SET @I = CAST(CAST(RIGHT(UPPER('00000000' + @Value),8) AS BINARY(8)) AS BIGINT) - CAST(0x3030303030303030 AS BIGINT) SET @I=@I-((@I/16)&CAST(0x0101010101010101 AS BIGINT))*7 RETURN CAST(CAST( (@I&15) +((@I/16)&240) +((@I/256)&3840) +((@I/4096)&61440) +((@I/65536)&983040) +((@I/1048576)&15728640) +((@I/16777216)&251658240) +(@I/CAST(0x0100000000000000 AS BIGINT)*268435456) AS BINARY(4))AS INT) END GO SELECT dbo.HexToINT('0ABC') , dbo.HexToINT('7FFF') , dbo.HexToINT('0FFF') , dbo.HexToINT('0') AS Zero, dbo.HexToINT('7FFFFFFF') AS MaxValue, dbo.HexToINT('80000000') AS MaxNeg, dbo.HexToINT('FFFFFFFF') AS NegOne
create function dbo.ufn_vbintohexstr ( @vbin_in varbinary(256) ) returns varchar(514) as Begin declare @x bigint declare @len int declare @loop int declare @value varbinary(514) set @value = 0x set @loop = 1 set @len = datalength(@vbin_in) if (@len & 1) <> 0 set @vbin_in = 0x00 + @vbin_in if (@len & 3) < 3 set @vbin_in = 0x0000 + @vbin_in while @loop <= @len begin set @x = CAST(substring(@vbin_in,@loop,4)AS BIGINT) set @x =65536* ( (@x&0xF0000000)*4096 +(@x&0x0F000000)*256 +(@x&0x00F00000)*16 +(@x&0x000F0000) ) +(@x&0xF000)*4096 +(@x&0x0F00)*256 +(@x&0x00F0)*16 +(@x&0x000F) set @x = (@x | 0x3030303030303030)+ ((@x+0x0606060606060606)/16 & 0x0101010101010101)*7 select @value = @value + CAST(@x AS BINARY(8)) set @loop = @loop + 4 end return '0x'+ right(CAST(@value AS VARCHAR(514)), @len*2) end GO select dbo.ufn_vbintohexstr(0x123456789abcdef1234) -- outputs: 0x0123456789ABCDEF1234 GO
转摘http://www.cnblogs.com/yyjj/archive/2012/03/06/2381592.html#undefined
分类: SqlServer数据库
标签: 类型认知, 转换
好文要顶 关注我 收藏该文
![](http://common.cnblogs.com/images/icon_weibo_24.png)
![](http://common.cnblogs.com/images/wechat.png)
![](http://pic.cnblogs.com/face/sample_face.gif)
山水中华
关注 - 460
粉丝 - 13
+加关注
0
0
(请您对文章做出评价)
« 上一篇:MySQL数据中分级分组显示数据
» 下一篇:mysql和SqlServer
中取得汉字字段的各汉字首字母
posted @ 2014-06-25 13:41 山水中华 阅读(469)
评论(0) 编辑 收藏
相关文章推荐
- Memcached+WebApi记录
- sql 嵌套查询
- MySQL 配置
- mybatis-mysql小优化
- mysql常用命令
- MySQL 性能优化的最佳20多条经验分享
- 基于关系型数据库的本体持久化
- PHP7下安装memcached扩展
- Redis从不懂到装懂
- MySQL主从复制与读写分离
- java 实现oracle VPD 权限控制
- mysql为表和字段取别名
- mysql InnoDB 的行锁
- mysql合并查询结果
- oracle 数据泵使用
- mysql5.7编译安装
- net start mongodb 提示:发生系统错误 5,拒绝访问。
- Sqlite 数据库、FMDB 简单使用
- MySQL引擎---读写分离对不同引擎的选择
- oracle connect by 用法