zoukankan      html  css  js  c++  java
  • mysql int(11)的理解

    之前一直认为int(m),就可以存储m位的长度的数据,直到有一次我发现int(5)也可以存储12939875891,我才想到去认真看下这个字符类型的意义。

    如下参考官方的文档,我们以int举例,其他类型相似。

    不论是int(m)m的值是多少,都占4Byte,那么m指定多少到底干嘛用的呢?举例往下看。

    第一个例子,m等于5,按照之前的逻辑就只能插入5个数字,多了不行,实际不是的,只要插入不超过10位数字都是可以的。

    mysql> show create table test2;
    +-------+----------------------------------------------------------------------------------------+
    | Table | Create Table |
    +-------+----------------------------------------------------------------------------------------+
    | test2 | CREATE TABLE `test2` (
    `id` int(5) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------+----------------------------------------------------------------------------------------+

    mysql> insert into test2 values (1293987589);
    Query OK, 1 row affected (0.16 sec)

    第二个例子:int(20),按照之前的思维可以存储20位的数字,其实不然,int定义的再大,还是会受int最大值的影响,只能存储10位以内的数据

    mysql> show create table test2;
    +-------+----------------------------------------------------------------------------------------+
    | Table | Create Table |
    +-------+----------------------------------------------------------------------------------------+
    | test2 | CREATE TABLE `test2` (
    `id` int(5) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------+----------------------------------------------------------------------------------------+

    mysql> insert into test3 values (1111111111111111111);
    ERROR 1264 (22003): Out of range value for column 'id' at row 1

    第三个例子,int(m)到底什么作用?

    mysql> show create table test4;
    +-------+-------------------------------------------------------------------------------------------------------+
    | Table | Create Table |
    +-------+-------------------------------------------------------------------------------------------------------+
    | test4 | CREATE TABLE `test4` (
    `id` int(20) unsigned zerofill NOT NULL  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------+-------------------------------------------------------------------------------------------------------+

    ps:unsigned zerofill NOT NULL 当不满足int(m)的指定宽度就用0来进行填充

    mysql> insert into test4 values (1111111111);
    Query OK, 1 row affected (0.01 sec)

    mysql> select * from test4;
    +----------------------+
    | id |
    +----------------------+
    | 00000000001111111111 |
    +----------------------+

    我们会发现int(20),除了10位要求,其他的可以用0来进行填充

    以上总结int(m)的用法:

    1.不论m为多少,都是固定占用8Byte。

    2.不论m为多少,都要受官方存储

  • 相关阅读:
    flask -服务端项目搭建
    蓝图 Blueprint
    flask-session
    flask-数据库操作 / ORM/Flask-SQLAlchemy/数据表操作/数据操作/数据库迁移
    在 Flask 项目中解决 CSRF 攻击
    Flask-Script 扩展/自定义终端命令/Jinja2模板引擎
    Flask项目创建/http的会话控制/Cookie/Session/请求钩子/异常捕获/context
    redtiger sql injection 练习
    流畅的python--序列构成的数组
    流畅的python--python的数据模型
  • 原文地址:https://www.cnblogs.com/liuxiuxiu/p/15557172.html
Copyright © 2011-2022 走看看