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为多少,都要受官方存储

  • 相关阅读:
    李宏毅机器学习笔记11(Unsurpervised Learning 03——Deep Generative model)
    李宏毅机器学习笔记09(Unsupervised Learning 01——Clustering and PCA)
    Nginx配置Https重定向 Chrome跳转到%2a.xxx.com的问题
    什么是REST——适合初学者的一种简单解释,第一部分:介绍
    微信授权全解
    师曾文正
    《不留痕迹》观后感
    半年的计划
    想做一名淡泊名利的逐梦者
    如何让微信浏览器返回上一页时强制刷新
  • 原文地址:https://www.cnblogs.com/liuxiuxiu/p/15557172.html
Copyright © 2011-2022 走看看