• Mysql数据库int(1)和tinyint(1)的区别&&扩展阅读


    转自:http://blog.csdn.net/phpwish/article/details/7845921

    今天看项目的数据库结构设计,发现一个奇怪的地方。

    `xxx_detail`   `delflag` int(1) NOT NULL DEFAULT '0' COMMENT '删除标志',


    `xxx_category`   `delflag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标记',


    问题:int(1) 和 tinyint(1) 有什么区别呢?

    像这样的设计,反正我是不会写int(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 限制的是储存字符的个数,字符不分贵贱(不分 中文、英文、数字...)。

  • 相关阅读:
    [MyBatis]最简MyBatis工程
    eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包
    day48_项目管理学习笔记
    项目流程之失败的案例
    项目流程之婚礼流程
    day47_Maven学习笔记
    快还要更快,让PHP 7 运行更加神速
    Linux服务器时间同步
    Win10系统开启Linux Bash命令行
    红帽RHOP 8 发布一条龙方案
  • 原文地址:https://www.cnblogs.com/wenlj/p/5066087.html
Copyright © 2020-2023  润新知