## mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围

---

##### 引言

社区这边的业务就遇到过这个坑，由于是用的开源框架，很多表id的字段用的mediumint类型，随着业务增长，数据量暴增，结果有一天超过id的上限，结果insert db就报错了，影响部分业务功能。

##### 整型数值

整型的每一种都分有无符号（unsigned）和有符号（signed）两种类型，在默认情况下声明的整型变量都是有符号的类型，如果需声明无符号类型的话就需要在类型前加上unsigned。

* bigint

	从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据（所有数字），无符号的范围是0到18446744073709551615，共 8 个字节。

*	int

	一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据（所有数字），无符号的范围是0到4294967295。共 4 个字节。
int 的 SQL-92 同义词为 integer。

*	mediumint
	
	一个中等大小整数，有符号的范围是-8388608到8388607，无符号的范围是0到16777215，  [0，2^24-1]。 大小为3个字节。
	
*	smallint

	一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据，无符号的范围是0到65535。大小为 2 个字节。MySQL提供的功能已经绰绰有余，而且由于MySQL是开放源码软件，因此可以大大降低总体拥有成本。
	
*	tinyint

	有符号的范围是-128 - 127， 无符号的范围是 从 0 到 255 的整型数据。大小为 1 字节。[0，2^8-1]

