数据类型概述
- MySQL的数据类型分为五大类
- 本文主要详细描述数值型
数据类型基本概念
- M:整数类型,M表示显示的最大宽度。浮点和定点类型,M是存储的总位数(精度)。字符串类型,M是最大长度。M的范围依赖于数据类型。
- D:D在浮点和定点类型中表示小数位数。最大值为30,不能超过M-2
- fps:fps用于time,datetime,timestamp类型表示分秒精度,也就是分秒的位数。范围在0-6,默认为6。
- []:方括号表示类型定义的可选部分
数值型
分类
- 整型
- TYNYINT
- SALLINT
- INTEGER
- MEDIUMINT
- BIGINT
- 定点型
- 浮点型
- BIT
数值型基本规则
- M对于整型表示显示宽度,跟值的范围没有任何关系,最大值为255。例如:INT(5),代表字段显示宽度为5,它能表示的范围还是-2147483648~2147483647
- M对于浮点型和定点型,表示存储位数
- 如果列声明了ZEROFILL,那么自动带有UNSIGNED属性
- 数值类型默认就是SIGNED,所以有没有这个属性没影响
整型类型声明详解
- TINYINT[(M)] [UNSIGNED] [ZEROFILL]
- M表示显示宽度,范围见下表。M会在查询时的元数据返回,是否适应取决于应用。当跟ZEROFILL配合使用时,如果长度小于M的值,会被0填充。比如TYNYINT(5) ZEROFILL,插入99的时候,会显示为00099
- BOOL,BOOLEAN
- 等同于TINYINT(1)
- 数字0被认为时false,其他数字为true
- SELECT IF(0, 'true', 'false');结果为false
- SELECT IF(1, 'true', 'false');结果为true
- SELECT IF(2, 'true', 'false');结果为true
- 但是,当数字跟bool比较时,只有0被认为时false,1被认为是true,其余的比较都是false
- SELECT IF(0 = FALSE, 'true', 'false');结果为true
- SELECT IF(1 = TRUE, 'true', 'false');结果为true
- SELECT IF(2 = TRUE, 'true', 'false');结果为false
- SELECT IF(2 = FALSE, 'true', 'false');结果为false
- SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
- MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
- INTEGER[(M)] [UNSIGNED] [ZEROFILL]
- BIGINT[(M)] [UNSIGNED] [ZEROFILL]
- 解释同TINYINT
- SERIAL等同于BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
类型 |
存储位数 |
带符号最小值 |
无符号最小值 |
带符号最大值 |
无符号最大值 |
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 |
-2^63 |
0 |
2^63-1 |
2^64-1 |
定点型详解
- DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
- 表示一个精确的值,当存储跟钱相关的数据时推荐使用
- 等同于DEC、NUMERIC、FIXED
- M最大值为65,默认10;D最大值30,默认0
- DECIMAL(5,2)表示存储范围为-999.99 to 999.99
浮点型详解
- FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
- DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
- 双精度浮点数,15位精度
- 等同于DOUBLE PRECISION
- 存储近似值,如果没有指定M和D,实际存储范围取决于硬件和操作系统
- M表示总位数,D表示小数位数
- 使用UNSIGNED不会改变存储的最大值,只是不允许存储负数
- 如果REAL_AS_FLOAT模式开启,REAL等同于FLOAT,否则等同于DOUBLE。默认未开启
- FLOAT(p) [UNSIGNED] [ZEROFILL]
- p代表精度,如果是0~24,数据类型就变成了FLOAR,如果是25~53就变成了DOUBLE;这个语法主要是为了兼容ODBC
- 所以,注意FLOAT(5,2)和FLOAT(5)有本质的区别
BIT型详解
- BIT(M)
- M表示位数,范围是1~64,默认1。指定值时使用b'111',代表7,如果类型时BIT(6),那么会左填充,等于b'000111'
注意
- 整型里面的M是显示宽度,跟范围没关系,只是在获取结果集元数据能拿到这个值,至于用不用,那就是应用的事了。比如int(3),你还是可以存个99999,没有任何影响。M用来配合ZEROFILL的时候,可以用作0填充,如果不到M位的,左边都是用0填充。
- 整型使用了UNSIGNED属性,只能存储正数,且上限会变大。小数使用UNSIGNED只会不能允许存储负数,上限不变。
- 整型和浮点型可以有AUTO_INCREMENT,如果这列是not null的,当插入null到这一列,它会自动设置一个字增值。AUTO_INCREMENT从1开始。设置为0根设置为null一样。
- 数据溢出在严格模式下会报错,在非严格模式下会插入特定值,只是会显示警告,通过show warnings查看
参考文档
MySQL官网
posted @
2021-03-25 15:16
java拌饭
阅读(
498)
评论()
编辑
收藏
举报