SQLSERVERint类型只能是有符号整形!
SQLSERVER int类型只能是有符号整形!
int、bigint、smallint 和 tinyint (Transact-SQL)
SQL Server 20140(共 2)对本⽂的评价是有帮助 -
使⽤整数数据的精确数字数据类型。
适⽤范围:SQL Server(SQL Server 2008 ⾄),Windows Azure SQL Database(初始版本⾄)。
decimal是整数数据类型数据类型范围存储bigint-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 字节int-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)  4 字节smallint-2^15 (-32,768) 到 2^15-1 (32,767)  2 字节tinyint0 到 255  1 字节
将整数隐式转换为字符数据类型时,如果整数太⼤⽽⽆法容纳到字符字段中,则 SQL Server 会输⼊ ASCII 字符 42,即星号 (*)。
⼤于 2,147,483,647 的整数常量将转换为decimal 数据类型,⽽不是 bigint 数据类型。下⾯的⽰例显⽰当超过此阈值时,结果的数据类型将从int 变为 decimal。
SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;
下⾯是结果集:
Result1      Result2
1073741823  1073741824.500000
下⾯的⽰例使⽤bigint、int、smallint 和 tinyint 数据类型创建⼀个表。值插⼊到每列中并在 SELECT 语句中返回。
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn  int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;
下⾯是结果集:
MyBigIntColumn      MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807  214483647  32767            255
(1 row(s) affected)
sd
数据类型 (Transact-SQL)
SQL Server 2014此主题尚未评级 -
在 SQL Server 中,每个列、局部变量、表达式和参数都具有⼀个相关的数据类型。数据类型是⼀种属性,⽤于指定对象可保存的数据的类型:整数数据、字符数据、货币数据、⽇期和时间数据、⼆进制字符串等。SQL Server 提供系统数据类型集,该类型集定义了可与 SQL Server ⼀起使⽤的所有数据类型。您还可以使⽤ Transact-SQL 或 Microsoft .NET Framework 定义⾃⼰的数据类型。别名数据类型基于系统提供的数据类型。有关别名数据类型的详细信息,请参阅。⽤户定义类型从您使⽤ .NET Framework ⽀持的编程语⾔之⼀创建的类的⽅法和运算符中获取它们的特征。
当两个具有不同数据类型、排序规则、精度、⼩数位数或长度的表达式通过运算符进⾏组合时,结果的特征由以下规则确定:
结果的数据类型是通过将数据类型的优先顺序规则应⽤到输⼊表达式的数据类型来确定的。有关详细信息,请参阅。
当结果数据类型为char、varchar、text、nchar、nvarchar 或 ntext 时,结果的排序规则由排序规则的
优先顺序规则确定。有关详细信息,请参阅。
结果的精度、⼩数位数及长度取决于输⼊表达式的精度、⼩数位数及长度。有关详细信息,请参阅。
SQL Server 提供了数据类型同义词以与 ISO 兼容。有关详细信息,请参阅。
SQL Server 中的数据类型归纳为下列类别:
精确数字Unicode 字符串
近似数字⼆进制字符串
⽇期和时间其他数据类型
字符串
在 SQL Server 中,根据其存储特征,某些数据类型被指定为属于下列各组:
⼤值数据类型:varchar(max)、nvarchar(max) 和 varbinary(max)
⼤型对象数据类型:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max) 和 xml
精确数字
近似数字
⽇期和时间
字符串
Unicode 字符串
⼆进制字符串
其他数据类型
地⽅
2.7.2 类型溢出
举例
以MySQL5版本,int类型为例:
#建表
root@localhost(test2)14:46>create table test2 (a int(10) UNSIGNED);
Query OK, 0 rows affected (0.12 sec)
#插⼊数据
root@localhost(test2)14:56>insert test2 values (10);
Query OK, 1 row affected (0.00 sec)
#模拟更新溢出
root@localhost(test2)14:56>update test2 set a=a-11;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
#查看warnings
root@localhost(test2)14:57>show warnings;
+---------+------+--------------------------------------------+
| Level  | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'a' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)
#确定实际得到的值已经溢出
root@localhost(test2)14:57>select * from test2;
+------------+
| a          |
+------------+
| 4294967295 |
+------------+
1 row in set (0.00 sec)
#清理数据
root@localhost(test2)14:59>delete from test2;
Query OK, 1 row affected (0.00 sec)
#模拟插⼊溢出
root@localhost(test2)14:59>insert test2 values (-1);
Query OK, 1 row affected, 1 warning (0.00 sec)
#查看warnings
root@localhost(test2)14:59>show warnings;
+---------+------+--------------------------------------------+
| Level  | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'a' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)
#确定实际得到的值已经溢出
root@localhost(test2)14:59>select * from test2;
+------+
| a    |
+------+
|    0 |
+------+
1 row in set (0.00 sec)
原因
int占⽤4个字节,⽽int⼜分为⽆符号型和有符号性。对于⽆符号型的范围是0 到 4294967295;有符号型的范围是-2147483648 到 2147483647。举⼀反三,其他类型都可能有类似问题,均需要考量。
控制⽅法
可以通过sql_mode参数控制,但⼀般建议程序控制,⽐如:对表单项的值进⾏校验。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。