SQL Server 里的int型取值范围是多少??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 里的int型取值范围是多少??相关的知识,希望对你有一定的参考价值。

SQLServer中int的默认长度是4,即4个32位字节,数据范围从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)用于int的sql-92单词是integer。

在支持整数值的地方支持Int数据类型。但是,在某些特殊情况下不能使用int,当整数值超过int数据类型支持的范围时可以使用bigint。在SQLServer中,int数据类型是主要的整数数据类型。

扩展资料:

当转换成int,短整型,非常小的整数或bigint恒定值浮动,真实,小数,或数值数据类型隐式或显式地使用算术运算符(+,-,*,/或%,规则应用在评估精度的数据类型和表达式的结果取决于不同自动参数化查询。

因此,查询中相似的表达式有时会产生不同的结果。如果查询没有自动参数化,则在将常量值转换为指定的数据类型之前,首先将其转换为数值,该数据类型足够精确,可以保存常量的值。例如,常数值1被转换为数值(1,0),而常数值250被转换为数值(3,0)。

参考技术A

SQL Server 里int型的数值默认长度为4,即4个字节32位,数据范围为从-2^31 (-2,147,483,648) 到 2^31 - 1(2,147,483,647) 的整型数据(所有数字)。int 的 SQL-92 同义字为 integer。

在支持整数值的地方支持 int 数据类型。但是,int在某些特殊的情况不能使用,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。

扩展资料:

使用 +、-、*、/ 或 % 等算术运算符将 int、smallint、tinyint 或 bigint 常量值隐式或显式转换为float、real、decimal 或 numeric 数据类型时,SQL Server 计算数据类型和表达式结果的精度时应用的规则有所不同,这取决于查询是否是自动参数化的。

因此,查询中的类似表达式有时可能会生成不同的结果。 如果查询不是自动参数化的,则将常量值转换为指定的数据类型之前,首先将其转换为 numeric,该数据类型的精度很大足以保存常量的值。例如,常量值 1 转换为 numeric (1, 0),常量值 250 转换为 numeric (3, 0)。


参考技术B int型取值范围为(+/-)2,147,483,647;
解释:先介绍下字节换算“1个字节=8位“。int型的数值默认长度为4个字节,那就是32位,用二进制换算最大长度就是2^31(0-31),并且有正负值的区分,算出来的结果就是int类型数值范围。
参考技术C -32768~32767 参考技术D -2^31--------2^31-1本回答被提问者采纳

php 怎样将有范围的ip转化为整型范围

<?php

$ip = $_SERVER["REMOTE_ADDR"]; // 获取客户端IP
$longip = ip2long($ip);

// 程序员通常将 IP 转换成整形写入数据库
// 读取的时候再把它转成标准的 IP 地址

$ip = long2ip($longip);

echo '<pre>';
print_r(array($longip => $ip));

?>

参考技术A php中将IP转换成整型的函数ip2long()容易出现问题,在IP比较大的情况下,会变成负数。
如下
<?php
$ip = "192.168.1.2";
$ip_n = ip2long($ip);
echo $ip_n; //得到 -1062731518
?>
由于IP转换成的整型值太大超出了整型的范围,所以变成负数。需写成$ip_n = bindec(decbin(ip2long($ip)));这样便可得到无符号的整型数,如下
<?php
$ip = "192.168.1.2";
$ip_n = bindec(decbin(ip2long($ip)));
echo $ip_n; //得到 3232235778
?>

PS: 另一个方法
$ip_long = = sprintf("%u", ip2long($ip));

如何将四个字段以点分开的IP网络址协议地址转换成整数呢?PHP里有这么一个函数ip2long.比如
<?php
echo ip2long("10.2.1.3");
?>
我们将得到
167903491

这是如何计算的,目前我知道有两个算法。其一
<?php
function ip2int($ip)
//我们先把ip分为四段,$ip1,$ip2,$ip3,$ip4
list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
//然后第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256
//这即是我们得到的值
return $ip1*pow(256,3)+$ip2*pow(256,2)+$ip3*256+$ip4;

?>

其二,用位运算
<?php
function ip2int($ip)
list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
return ($ip1<<24)|($ip2<<16)|($ip3<<8)|($ip4);

?>

我们会发现,有些ip转化成整数后,是负的,这是因为得到的结果是有符号整型,最大值是2147483647.要把它转化为无符号的,可以用
sprintf("%u",ip2long($ip);

就能转换为正整数。而且得到的结果用long2ip也可以正常转换回原来的ip地址。也可以用ip2long来验证一个ip是否是有效的,如
<?php
function chk_ip($ip)
if(ip2long($ip)=="-1")
return false;

return true;

//应用
var_export(chk_ip("10.111.149.42"));
var_export(chk_ip("10.111.256.42"));
?>
将输出true和false
把ip数据保存在数据库(MySQL)中时候,我们习惯用ip2long函数生成整型,然后存放在一个int(11)类型的字段中,但是,在不同的系统平台上,ip2long函数得到的值是不同的,因此可能造成在从数据库中读出数据,用long2ip得到ip的时候产生错误,说一下我们碰到的情况:
我们用一个int(11)类型(范围-2147483648 - 2147483647)来保存把一个ip地址用ip2long处理得到的结果,例如ip是’202.105.77.179′,那么在32位机器上得到的结果是:-899068493,而在64位机器上却得到3395898803.然后把它写入数据库,由于超过int(11)的范围,因此64位机器上的结果被保存为int(11)的最大值:2147483647.于是在从数据库中取出的时候,便得到了错误的结果,会得到”127.255.255.255″这个ip地址.
解决的办法很多,比如可以用mysql的函数:INET_ATON和INET_NTOA来处理ip地址;或者把保存ip地址的字段改为bigint类型,这样在64位机器上虽然保存的是3395898803,使用long2ip函数仍能得到正确的结果.

以上是关于SQL Server 里的int型取值范围是多少??的主要内容,如果未能解决你的问题,请参考以下文章

sql server中的怎么把数值型转换为字符串

c语言中long型的65530转化为int型是多少啊?为啥啊?

设C语言中,一个int型数据在内存中占2个字节,则int型数据的取值范围为 如何计算的?

C语言中,unsigned int型数据的取值范围是

64位系统下C语言中int值的取值范围

php 怎样将有范围的ip转化为整型范围