慕盖茨4494581
据我所知,只有一个小的区别是当您试图插入超出范围的值时。在示例中,我将使用401421228216,也就是101110101110110100100011101100010111000(长度)39字符)如果你有INT(20)对于系统,这意味着在内存中分配至少20位。但是如果你要插入比2^20,它将被成功地存储,只有当它少的时候INT(32) -> 2147483647(或2 * INT(32) -> 4294967295为UNSIGNED)例子:mysql> describe `test`;+-------+------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------------+------+-----+---------+-------+| id | int(20) unsigned | YES | | NULL | |+-------+------------------+------+-----+---------+-------+1 row in set (0,00 sec)mysql> INSERT INTO `test` (`id`) VALUES (401421228216);ERROR 1264 (22003): Out of range value for column 'id' at row 1mysql> SET sql_mode = '';Query OK, 0 rows affected, 1 warning (0,00 sec)mysql> INSERT INTO `test` (`id`) VALUES (401421228216);Query OK, 1 row affected, 1 warning (0,06 sec)mysql> SELECT * FROM `test`;+------------+| id |+------------+| 4294967295 |+------------+1 row in set (0,00 sec)如果你有BIGINT(20)对于系统,这意味着在内存中分配至少20位。但是如果你要插入比2^20,它将被成功地存储,如果它少的话BIGINT(64) -> 9223372036854775807(或2 * BIGINT(64) -> 18446744073709551615为UNSIGNED)例子:mysql> describe `test`;+-------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+-------+| id | bigint(20) unsigned | YES | | NULL | |+-------+---------------------+------+-----+---------+-------+1 row in set (0,00 sec)mysql> INSERT INTO `test` (`id`) VALUES (401421228216);Query OK, 1 row affected (0,04 sec)mysql> SELECT * FROM `test`;+--------------+| id |+--------------+| 401421228216 |+--------------+1 row in set (0,00 sec)