• MySQL数据类型之数值类型,对理解类型定义中的“位”有莫大的帮助


    整数类型:TINYINTSAMLLINTMEDIUMINTINTBIGINT--1字节、23.48

    浮点数类型:FLOAT(m,d)DOUBLE(m,d)==REAL-4字节、8

    定点数类型:DECIMAL(m,d)NUMERIC-m+2字节、8

    位类型:BIT(m)-1-8字节

    各个类型的详细范围可以参考mysql文档

     

     

    数据类型小例:

    1.整数类型

    create table t1

    (

      id int,

      id2 int(4)

    );

    insert t1 select 1,2;

    select * from t1;

    +------+------+

    | id   | id2  |

    +------+------+

    |    1 |    2 |

    +------+------+

    alter table t1 modify id int zerofill;

    alter table t1 modify id2(4) int zerofill;

    select * from t1;

    +------------+------------+

    | id         | id2        |

    +------------+------------+

    | 0000000001 | 0002      |

    +------------+------------+

    insert t1 select 1,11111;

    Select * from t1;

    +------------+------------+

    | id         | id2        |

    +------------+------------+

    | 0000000001 | 0002 |

    | 0000000001 | 11111 |

    +------------+------------+

    insert t1 select -1,-2;

    +-------+------+---------------------------------------------+

    | Level | Code | Message                                     |

    +-------+------+---------------------------------------------+

    | Error | 1264 | Out of range value for column 'id' at row 1 |

    +-------+------+---------------------------------------------+

     

    结论:

           1. INT类型默认宽度11

          2上面的zerofill属性可以在int指定宽度不足时候在前面补上

          3.在插入的数值实际长度超过INT类型指定宽度时,忽略宽度,插入正确数值;

          4.在拥有zerofill属性后的int字段自动加上属性UNSIGNED,范围从0开始

     

     

    2.小数类型

      小数分成浮点数和定点数。浮点数包括单精度的FLOAT和双精度的DOUBLE;定点数则在内部以字符串形式存放,比较是和货币等高精度数据。

      小数类型后面的(md)前者表示数字共有m个数字(整数+小数位),小数点后面有d个数字位。

    create table t2

    (

     col1 float(5,2),

     col2 decimal(5,2)

    );

    insert t2 select 1.11,1.11;

    select * from t2;

    +------+------+

    | col1 | col2 |

    +------+------+

    | 1.11 | 1.11 |

    +------+------+

    insert t2 select 1.225,1.225;

    select * from t2;

    +------+------+

    | col1 | col2 |

    +------+------+

    | 1.11 | 1.11 |

    | 1.23 | 1.23 |

    +------+------+

    alter table t2 modify col1 float;

    alter table t2 modify col2 decimal;

    select * from t2;

    +------+------+

    | col1 | col2 |

    +------+------+

    | 1.11 |    1 |

    | 1.23 |    1 |

    | 1.11 |    1 |

    +------+------+

    insert t2 select 1.611111,1.6111111;

    select * from t2;

    +---------+------+

    | col1    | col2 |

    +---------+------+

    |    1.11 |    1 |

    |    1.23 |    1 |

    |    1.11 |    1 |

    | 1.61111 |    2 |

    +---------+------+

     

    结论:

    1.指定了小数位数后,如果插入的数的小数位数超过,会自动截断,并且四舍五入;

    2.修改小数位数后,decima会对现有数据进行自动截断,以符合现在的数据类型;

    3.默认的decimalmd分别为10也就是默认整形;

     

     

    3.bit数值类型

      Bit(m)m的范围从1-64 默认为1

    create table t3

    (

      col bit(1)

    );

    insert t3 select 2;

    +-------+------+-----------------------------------------+

    | Level | Code | Message                                 |

    +-------+------+-----------------------------------------+

    | Error | 1406 | Data too long for column 'col' at row 1 |

    +-------+------+-----------------------------------------+

    alter table t3 modify col bit(6);

    insert t3 select 2;

    select * from t3;

    +------+

    | col  |

    +------+

    |      |

    +------+

    select BIN(col),hex(col) from t3 ;

    +----------+----------+

    | BIN(col) | hex(col) |

    +----------+----------+

    | 10       | 2        |

    +----------+----------+

     

    结论:

    1.插入bit字段数值时,首先会把值转成2进制;如果位数比自定的长度大,插入失败;

        2.直接显示bit类型数据,结果为null;需要使用 bin()或者hex()等函数转化后显示;

  • 相关阅读:
    XX需求分析系统每日进度(二)
    XX需求分析系统每日进度(一)
    周总结(二)
    Hyperleder Fabric chaincode生命周期
    【转】六种学术不端的引用行为
    引导学生,让学生不走神。
    MySQL 的常用引擎
    LeetCode283移动零问题java高效解法
    使用android studio进行springboot项目的开发
    android逆向反编译工具包下载
  • 原文地址:https://www.cnblogs.com/acpp/p/2076464.html
Copyright © 2020-2023  润新知