首页 > 数据库 > MySQL > 正文

mysql中tinyint(1)和zerofill是什么意思

2024-07-24 12:39:34
字体:
来源:转载
供稿:网友

tinyint在mysql中指定长度了并且我们是不需要定义长度了就是定义了也是默认长度了,那么我们有时会看到tinyint(1)写法了,那么mysql中tinyint(1)和zerofill是什么意思呢?下面来持看.

知道了tinyint(1)中的1只是指定显示长度,并不表示存储长度,不过要字段指定zerofill才有用的.

例如tinyint(3),如果实际值是8,如果列指定了zerofill,查询后显示的结果就是008,左侧是用0来填充的.

示例代码:

  1. create table test2( 
  2.     id1 tinyint(2) zerofill, 
  3.     id2 tinyint(3) zerofill 
  4. ); 

插入一条数据:insert into test2 values (2,3);

mysql tinyint(1) 那么现在,mysql中tinyint(1),tinyint(2)..

mysql 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度,只有字段指定zerofill是有用,如int(3),如果实际值是2,如果列指定了zerofill,查询结果就是002,左边用0来填充,位数限制基本没有意义.

  1. mysql> create table testint(id int(1), col2 tinyint(1)); 
  2. Query OK, 0 rows affected (0.06 sec) 
  3. mysql> insert into testint values(256, 257); 
  4. Query OK, 1 row affected, 1 warning (0.03 sec) 
  5. mysql> select * from testint;  --Vevb.com 
  6. +------+------+ 
  7. | id | col2 | 
  8. +------+------+ 
  9. | 256 | 127 | 
  10. +------+------+ 
  11. 1 row in set (0.02 sec) 
  12. mysql> insert into testint values(336, 257); 
  13. Query OK, 1 row affected, 1 warning (0.02 sec) 
  14. mysql> select * from testint; 
  15. +------+------+ 
  16. | id | col2 | 
  17. +------+------+ 
  18. | 256 | 127 | 
  19. | 336 | 127 | 
  20. +------+------+ 
  21. rows in set (0.00 sec) 
  22. mysql> insert into testint values(336, 255); 
  23. Query OK, 1 row affected, 1 warning (0.03 sec) 
  24. mysql> select * from testint; 
  25. +------+------+ 
  26. | id | col2 | 
  27. +------+------+ 
  28. | 256 | 127 | 
  29. | 336 | 127 | 
  30. | 336 | 127 | 
  31. +------+------+ 
  32. rows in set (0.00 sec) 
  33. mysql> 

关注一下上边的warning提示.

mysql 中  真,假 这样的数据应该用什么数据类型?

reply:tinyint(1)

查了下,mysql中设置了储存类型后,储存是定长的,也就是说,int(1) 和 int(4) 在硬盘中所占的字节数都是一样的.

我们知道,int类型占4个字节,tinyint占1个字节,int(1) 和 int(4) 从本身长度还是存储方式上都是一样的,区别就是显示的长度不同,但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,int(4)指定后就会显示为0002.

int(1)和tinyint(4) 相比,肯定int 大.

注意数字类型后面括号中的数字,不表示长度,表示的是显示宽度,这点与 varchar、char 后面的数字含义是不同的,也就是说不管 int 后面的数字是多少,它存储的范围始终是 -2^31 到 2^31 - 1.

综上整型的数据类型括号内的数字不管是多少,所占的存储空间都是一样,tinyint一个字节 smallint 两个字节 MEDIUMINT三个字节,显而易见,int(1) 和 tinyint(1),在设计数据库的时候应该选择tinyint(1),所占的储存空间越少越好,当然要够用才行,像这样储存一个 个位数的字段,还是用tinyint(1)的好.

总结:

1.规定类型之后,存储是定长的,int(1)和int(4)从本身长度还是存储方式上都是一样的。mysql里,int(1)和int(4)的区别就是显示的长度,但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,如2 int(3)指定后就会显示为002

2.int 存储占4个字节, tinyint   存储占1个字节,存储长度决定了他们表示的数字范围不同。int表示的数字范围是:从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。tinyint 表示的范围是0-255之间的数字。

3.tinyint(1),和tinyint(3)没什么区别,存123都能存的下,而如果tinyint(3) zerofill 的话,插入值 12,会存储012,zerofill自动左边补零,这才是限制显示长度。

上面总结的有点乱,下面精简总结:

tinyint(1)  和 tinyint(3) 没什么区别,占用字节都是一位,存储范围都是一样的.

tinyint(3) zerofill,当插入的数据少于3位的时候,左边自动补零,这才是限制显示长度

int(1) 和 tinyint(1),够用的情况下,优先选择tinyint(1),因为占字节少、节省空间。

tinyint一个字节   smallint  两个字节 MEDIUMINT三个字节 int 4个字节 BIGINT 8个字节.

但是,varchar(5) 这里的5 限制的是储存字符的个数,字符不分贵贱(不分 中文、英文、数字...).

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表