mysql整型int(M)

类型 字节 最大值 最小值
(带负号的/无负号的) (带负号的/无负号的)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 63335
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

说明:
整数类型后面跟的是显示的宽度。M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

1.创建表

mysql> create table int_test(a int(1) unsigned not null,
b int,c int(20) unsigned zerofill);
Query OK, 0 rows affected (0.01 sec)
mysql> show create table int_test;
+----------+-------------------------------
-------------------------------------------
| Table    | Create Table

+----------+-------------------------------
-------------------------------------------
| int_test | CREATE TABLE `int_test` (
  `a` int(1) unsigned NOT NULL,
  `b` int(11) DEFAULT NULL,
  `c` int(20) unsigned zerofill DEFAULT NUL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+-------------------------------
-------------------------------------------
1 row in set (0.00 sec)

mysql>

2.插入数据

mysql> insert into int_test values(23,99999,123456789);
Query OK, 1 row affected (0.01 sec)

mysql> select * from int_test;
+----+-------+----------------------+
| a  | b     | c                    |
+----+-------+----------------------+
| 23 | 99999 | 00000000000123456789 |
+----+-------+----------------------+
1 row in set (0.00 sec)

注意:
int(M),
这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(1)只能存储1个长度的数字,int(20)就会存储20个长度的数字,这是大错特错的。
tinyint(1) 和 tinyint(20) 中的1和20并不表示存储长度,只有字段指定zerofill是有用,
如tinyint(20),如果实际值是123456789,如果列指定了zerofill,查询结果就是00000000000123456789,左边用0来填充。


补充(char和varchar的区别):
char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。(在检索操作中那些填补出来的空格字符将被去掉)
在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容