mysql⼏何数据类型_MySQL数据类型全解析1 概述
本⽂主要介绍了MySQL的各种数据类型,版本为8.x,
MySQL的数据类型可以分为六类:数值类型,⽇期时间类型,字符串类型,⼆进制类型,JSON类型与空间数据类型.
2 数值类型
数值类型是最基本的类型,可以分为整数类型与浮点数类型.
json值的类型有哪些2.1 整型
类型
字节数
⽆符号范围
有符号范围
TINYINT
1
[0,255]
[-128,127]
SMALLINT
2
[0,65535]
[-32768,32767]
MEDIUMINT
3
0-1677w
+-838w
INT/INTEGER
4
0-42e
+-21e
BIGINT
8
0-18446744e
+-9223372e
没写出的具体的精确值⽆符号的范围计算公式如下:
有符号的计算公式如下:
所有整形如果允许NULL的话默认为NULL,不允许为NULL的需要⼿动设置默认值.
如果插⼊或修改的数据范围不符合会提⽰操作失败,如上图提⽰列c_mediumint的数据超出范围.
2.2 浮点型
可以⽤两种⽅式来表⽰⼩数,分别是浮点数类型与定点数类型.
浮点数⽤于不需要太精确的⼩数场合,类型包括FLOAT与DOUBLE,定点数类型就是DECIMAL.类型
字节数
范围
FLOAT
4
+- 1.17e-38 - 3.4e+38 和 0
DOUBLE
8
+- 2.22e-308 - 1.79e+308 和 0
DEC(M,D)/DECIMAL(M,D)
取决于M与D
取决于M与D
下⾯是测试的待插⼊的数据:
插⼊之后再查询:
可以看到,float的精度最⾼为6位,后⾯的进⾏四舍五⼊,DOUBLE的最⾼精度为15位.
下⾯来说⼀下DECIMAL.
2.3 DECIMAL
DECIMAL也可⽤DEC来表⽰,⽤于计算精确的⼩数值,DECIMAL通常如下表⽰:
DECIMAL(M,D)
类型
含义
取值范围
默认值
M
⼗进制有效数字总个数
1-65
10
D
⼩数点后⼗进制数字个数
0-30(D<=M)
如果要计算所占⽤的字节数,需要分为整数与⼩数两部分,分开计算再相加,每部分⼜按照9位数字去拆分,计算规则如下:
位数
占⽤字节数
1-2
1
3-4
2
5-6
3
7-9
4
也就是说对于
DECIMAL(24,8)
整数部分24-8=16位,⼩数部分8位,⼩数部分的8位根据规则所占⽤的字节数为4个,整数部分按每9位进⾏拆分,16=9+7,9位的部分占4个字节,7位的部分按照规则也占4个字节,所以整数部分占8个字节,加上⼩数部分的4个字节,总共占12个字节.
⾄于NUMERIC,在MySQL中,NUMERIC被实现为DECIMAL:
3 ⽇期与时间类型
总共有五类:YEAR,TIME,DATE,DATETIME,TIMESTAMP.
3.1 ⽇期
⽇期有两种类型:YEAR与DATE,YEAR表⽰年,DATE表⽰⽇期.
类型
字节数
取值范围
YEAR
1
[1901,2155]
DATE
3
[1000-01-01,9999-12-31]
DATE中的年⽉⽇插⼊时可以不分隔或者⽤各种符号进⾏分隔,⽐如
! @ # $ % ^ & * ( ) - / \ [ ] { } : ; ' " | , . < > ?
上图中的date都是合法的,插⼊之后MySQL都会统⼀⽤横杠代替:
YEAR的话MySQL其实允许两位数的YEAR,其中00-69表⽰2000-2069,70-99表⽰1970-1999.
其他插⼊⽅式的话可以⽤CURRENT_DATE,CURRENT_DATE(),CURDATE(),NOW(),CURTIME(),CURRENT_TIME,CURRENT_TIME():
3.2 时间
时间就⼀种类型:TIME.
TIME所占的字节数为3个字节,取值范围为:
[-838:59:59,838:59:59]
插⼊时时分秒可以不分隔或者必须以冒号分隔.
插⼊后统⼀变为冒号分隔:
可以使⽤CURRENT_TIME或CURRENT_TIME(),CURTIME()或NOW()插⼊:
甚⾄也可以使⽤CURDATE(),不过此时插⼊的是零值:
3.3 ⽇期+时间
TIMESTAMP与DATETIME:
类型
字节数
取值范围
DATETIME
8
[1000-01-01 00:00:00,9999-12-31 23:59:59]
TIMESTAMP
4
[19700101080001,20380119111407]
DATETIME就是DATE与TIME的结合,先DATE再TIME,空格分隔.
TIMESTAMP表⽰时间戳,表⽰当前时间到1970年1⽉1⽇0时0分0秒经过的秒数,中的写法是年⽉⽇时分秒,⽐如19700101080001
表⽰
1970年1⽉1⽇8时0分01秒
这⾥之所以使⽤080001是因为中国的时区.
19700101000000
会报错,范围不允许.
19700101080000
也不⾏.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。