zoukankan      html  css  js  c++  java
  • MySQL数据类型-整型

    ​ MySQL支持SQL标准整数类型integer(或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。

    类型 所占字节 有符号最小值 无符号最小值 有符号最大值 无符号最大值
    TINYINT 1 -128 0 127 255
    SMALLINT 2 -32768 0 32767 65535
    MEDIUMINT 3 -8388608 0 8388607 16777215
    INT 4 -2147483648 0 2147483647 4294967295
    BIGINT 8 -263 0 263-1 264-1

    下面是创建表的语句:

        CREATE TABLE `person` (
          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
          `age` int(2) COMMENT '年龄',
          `stature` int(3) ZEROFILL COMMENT '身高',
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    

    ​ 其中列 id 、 age、stature都是整型 。其中int后面括号中的数字指的是列宽,用M表示。对于整数类型,M表示最大显示宽度。最大显示宽度为255。显示宽度与类型可以存储的值范围无关。

    我们来添加几条数据测试:

        INSERT INTO person( age, stature) VALUES(102,168);
        INSERT INTO person( age, stature) VALUES(5,80);
        INSERT INTO person( age, stature) VALUES(99999,99999);
    

    查询结果:

    id age stature
    1 102 168
    2 5 080
    3 99999 99999
    • age我们设置的宽度是2,但是没有增加ZEROFILL属性,这个时候,不论是INT(2)还是INT(11),它在数据库里面存储的都是4个字节的长度,没有任何区别。
    • stature我们设置的快读是3,并且设置了ZEROFILL属性,那么我们插入的长度小于3,前面就补0,如080,如果长度大于3,如99999,则也可以正常插入。

    注意我使用 Navicat 查询的时候,第三条记录显示不正确(少了几个9),但是使用命令行查询则正确。

    如果为数值列指定了ZEROFILL, MySQL会自动将UNSIGNED属性添加到该列。

        INSERT INTO person( age, stature) VALUES(25,-80);
    

    结果如下,说明stature已经是非负整数了:

        INSERT INTO person( age, stature) VALUES(25,-80)
        > 1264 - Out of range value for column 'stature' at row 1
        > 时间: 0.004s
    

    ​ 从MySQL 8.0.17开始,对于数字数据类型,不建议使用ZEROFILL属性,并且在将来的MySQL版本中将不再支持该属性。 考虑使用替代方法来产生此属性的效果。 例如,应用程序可以使用 LPAD() 函数将数字零填充到所需宽度,或者将格式化的数字存储在CHAR列中。

    总结:

    1. 不加 ZEROFILL 属性,int(1) 和 int(11)没有任何区别,底层数据都是4个字节,注意字段显示宽度最大为255.
    2. 加上 ZEROFILL 属性,列默认为无符号,并且值宽度小于显示宽度会在左边补0,大于显示宽度则正常显示。
    3. 不建议使用 ZEROFILL 属性,使用LPAD函数代替此功能。
  • 相关阅读:
    10.2 处理大集合
    观察者模式——出版者与订阅者
    phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
    另一鲜为人知的单例写法-ThreadLocal
    Spring MVC中Controller如何将数据返回给页面
    IntelliJ IDEA安装主题详细步骤
    oracle导出dmp文件的2种方法
    Oracle导出表(即DMP文件)的两种方法
    Spring MVC 实现文件的上传和下载
    压力测试 JMeter3.3
  • 原文地址:https://www.cnblogs.com/ye-feng-yu/p/12017827.html
Copyright © 2011-2022 走看看