• int(5)


    在设计 mysql 表字段时,int(5) 表示是该字段长度为 5 吗?如果你觉得是,那请你继续往下看,相信你会有新的收获的。

    先来看一个实际例子,我们创建一个新表,表中只有一个主键 id 和一个 length 字段,其中 length 字段设置为 int(5) 。

    #新建test表
    CREATE TABLE `test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `length` int(5) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    是不是 length 字段只能存储长度不超过 5 的数字呢,我们来插入一条数据试试。我们插入一条较大的数据 123456789 ,这个数据一共有 9 位,看能否正常插入。

    #插入一条大数据
    insert into test (length) values (123456789);

    结果证明 int(5) 能插入长度大于 5 的数据,所以现在可以肯定的是 int(5) 并不是代表数据的宽度。

    #查看插入数据
    mysql> select * from test;
    +------------+-----------+
    | id         | length                |
    +------------+-----------+
    |  1          | 123456789           |
    +------------+-----------+

    在 mysql 中 int 字段长度其实是固定的,就是 4 个字节,不管你 int(11)  还是 int(5) 字段长度就是固定的 4 个字节。

    int(5) 其实是和另一个属性 zerofill 配合使用的,表示如果该字段值的宽度小于 5 时,会自动在前面补 0 ,如果宽度大于等于 5 ,那就不需要补 0 。

    #int(5) length 字段添加了 zerofill 属性
    mysql> select * from test;
    +----+--------+
    | id | length |
    +----+--------+
    |  1 |  00888 |
    |  2 |  00012 |
    |  3 |  12345 |
    |  4 | 123456 |
    +----+--------+

    注意前提是给该字段添加了 zerofill 属性,不然 int(5) 不起作用。

    #int(5) length 字段没有 zerofill 属性
    mysql> select * from test;
    +----+--------+
    | id | length |
    +----+--------+
    |  1 |    888 |
    |  2 |     12 |
    |  3 |  12345 |
    |  4 | 123456 |
    +----+--------+

    要想对整形字段设置长度,应该是选择 tinyint、smallint、mediumint、int、bigint 这几个类型,这几个整数类型才代表了固定的长度,具体长度请看下面这个表格。

    注意如果要存储带符号的整形数,是不支持 zerofill 属性的,会自动转换为 0,在一些涉及递减的业务中需要注意考虑一下。

  • 相关阅读:
    STM32中GPIO的8种工作模式
    robots.txt与搜索引擎
    关于《腾讯工具类APP的千年老二》的读后感
    PCB布线的操作步骤
    c语言数据库编程ODBC
    锂电池相关结构优势特点及其保护电路解析方案
    C语言中的#与##字符的作用
    PADS中Layer的描述说明
    吃了单片机GPIO端口工作模式的大亏——关于强推挽输出和准双向口(弱上拉)的实际应用
    Protel与PADS之间相关文件的转换
  • 原文地址:https://www.cnblogs.com/igoodful/p/13801748.html
Copyright © 2020-2023  润新知