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]