前言:整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用,我来为大家讲解一下关于int类型取值范围怎么算?跟着小编一起来看一看吧!

int类型取值范围怎么算(INT类型知多少)

int类型取值范围怎么算

前言:整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用。

1.整型分类及存储范围

整数类型 字节 有符号范围 无符号范围 TINYINT 1 -128 ~ 127 0 ~ 255 SMALLINT 2 -32768 ~ 32767 0 ~ 65535 MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215 INT/INTEGER 4 -2147483648 ~ 2147483647 0 ~ 4294967295 bigint 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615 表格一共有四列分别表示:字段类型, 占用字节数, 有符号范围, 无符号范围。我们拿int类型为例:int类型, 占用字节数为4byte, 学过计算机原理的同学应该知道, 字节(byte)并非是计算机存储的最小单位, 还有比字节(byte)更小的单位, 也就是位(bit),一个位就代表一个0或1; 8个位组成一个字节; 一般字节用大写B来表示byte, 位用小写b来表示bit.

计算机存储单位的换算:

1B=8b

1KB=1024B

1MB=1024KB

那么根据int类型允许存储的字节数是4个字节, 我们就能换算出int unsigned(无符号)类型的能存储的最小值为0, 最大值为4294967295(即4B=32b, 最大值即为32个1组成,即4294967295换算成二进制则是32个1)。

2.存储范围测试

mysql> CREATE TABLE test_int ( -> col1 TINYINT, -> col2 SMALLINT, -> col3 MEDIUMINT, -> col4 INT, -> col5 BIGINT -> ) ENGINE = INNODB DEFAULT CHARSET = utf8; Query OK, 0 rows affected (0.01 sec) mysql> show create table test_int\G *************************** 1. row *************************** Table: test_int Create Table: CREATE TABLE `test_int` ( `col1` tinyint(4) DEFAULT NULL, `col2` smallint(6) DEFAULT NULL, `col3` mediumint(9) DEFAULT NULL, `col4` int(11) DEFAULT NULL, `col5` bigint(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> insert into test_int values (1234,123456,12345678,12345678901,12345678901234567890); Query OK, 1 row affected, 5 warnings (0.00 sec) mysql> insert into test_int values (-1234,-123456,-12345678,-12345678901,-12345678901234567890); Query OK, 1 row affected, 5 warnings (0.01 sec) mysql> show warnings; --------- ------ ----------------------------------------------- | Level | Code | Message | --------- ------ ----------------------------------------------- | Warning | 1264 | Out of range value for column 'col1' at row 1 | | Warning | 1264 | Out of range value for column 'col2' at row 1 | | Warning | 1264 | Out of range value for column 'col3' at row 1 | | Warning | 1264 | Out of range value for column 'col4' at row 1 | | Warning | 1264 | Out of range value for column 'col5' at row 1 | --------- ------ ----------------------------------------------- 5 rows in set (0.01 sec) mysql> select * from test_int; ------ -------- ---------- ------------- ---------------------- | col1 | col2 | col3 | col4 | col5 | ------ -------- ---------- ------------- ---------------------- | 127 | 32767 | 8388607 | 2147483647 | 9223372036854775807 | | -128 | -32768 | -8388608 | -2147483648 | -9223372036854775808 | ------ -------- ---------- ------------- ----------------------

从上述测试中我们可以看出:有符号时,各种整型类型最大的存储范围,当存储数字大小不在存储范围时,MySQL会产生告警,但数字可以插入,默认截取为可存储的最大值或最小值。

,