重庆熊猫 Loading

MySQL教程 - 数据类型(Data Type)

更新记录
转载请注明出处。
2022年9月1日 发布。
2022年9月1日 从笔记迁移到博客。

数据类型

数据类型概念

数据类型是一种数据的限制,规定数据的存储格式、表示方式、范围大小等

整型

分类

image

说明:声明为无符号数,加上UNSIGNED即可

表示方式

格式:

数据类型 (显示宽度)

EG:

INT(4)  TINYINT(3)

注意:也可以不指定显示宽度,默认显示宽度为能显示该类型值最大值的宽度

浮点型

分类

image

指定显示范围

格式:

数据类型 (总长度,小数点后的长度)

EG:

FLOAT (6,3) DECIMAL(8,3)

注意:
浮点数最好不指定长度,定点数可以指定。原因:易于数据迁移
超过长度的数据插入到表中会进行四舍五入
对精度要求高需使用DECIMAL类型

注意

FLOAT和DOUBLE会进行四舍五入
DECIMAL不会进行四舍五入
DECIMAL(M,D)占用M+2字节

字符串型

分类

字符数据类型

类型 字节数 说明
CHAR(M) M字节 定长字符串,M最大255
VARCAHR(M) M+1字节 可变长字符串,M最大255

文本字符串数据类型

类型 字节大小 存储空间
TINYTEXT 0-255字节 值的长度+2个字节
TEXT 0-65535字节 值的长度+2个字节
MEDIUMTEXT 0-167772150字节 值的长度+3个字节
LONGTEXT 0-42亿字节 值的长度+4个字节

表示方式

字符串数据类型 (最大长度)

EG:

CAHR(5)     字节大小固定为5
VARCHAR(10)   字节大小至少为1最多11

CHAR与VARCHAR区别

CHAR为固定长度,固定内存大小
VARCHAR为自动扩展长度,不固定内存大小,但是默认需要占用一个字节

ENUM枚举类型

作用:限定字符串的取值范围,每次只能选择一个定义的值

类型 字节数 说明
ENUM 1或2字节 枚举类型

表示方式

属性名 ENUM('value1', 'value2'…………..)

插入方法

INSERT INTO panda1 VALUES(1,'dog');

注意:最多可以定义65535个值

SET类型

作用:限定字符串的取值范围,每次可以选择一个或说多个定义的值

类型 字节数 说明
SET 1,2,3,4,8 集合类型

表示方式

属性名 SET('VALUE1',' VALUE2'………)

插入方法

INSERT INTO panda2 VALUES(1,'dog');
INSERT INTO panda2 VALUES(2,'panda,dog');

注意:最多可以定义有64个值

日期和时间

分类

日期类型 字节数 取值范围 默认零值
YEAR 1 1901-2155 0000
DATE 4 1000-01-01至9999-12-31 0000-00-00
TIME 3 -838:59:59至 838:59:59 00:00:00
DATETIME 8 1000-01-01 00:00:00至 9999-12-31 23:59:59 00:00:00
TIMESTAMP 4 19700101080001至20380119111407 000000000

YEAR类型表示方式

四位数值或字符串方式:

EG:'1999'

两位字符串方式:

'00-68' 转为 2000-2069

'70-99' 转为 1970-1999

EG:'35' -> 2035 '17' -> 2017

两位数值方式:

1-69 转为 2001-2069

70-99 转为 1970-1999

EG: 17 -> 2017 25 -> 2025

TIME类型表示方式

‘HH:MM:SS’字符串格式或‘D HH:MM:SS’字符串格式:

D表示天(0-34), HH表示小时 MM表示分钟 , SS表示秒

EG:

'15:00:00' 表示15小时

'2 15:00:00' 表示2天加15小时,内部存储为: 63:00:00

‘HHMMSS’字符串格式或HHMMSS数值格式:

HH表示小时, MM表示分钟, SS表示秒

EG:

'161616' 表示16小时16分16秒

171717 表示17小时17分17秒

备注:可以使用CURRENT_TIME或者NOW()获得当前系统时间

Date类型表示方式

‘YYYY-MM-DD’或‘YYYYMMDD’字符串表示:

YYYY表示年份,MM表示月份,DD表示日子

EG:

'2017-8-31'

‘YY-MM-DD’或’YYMMDD’字符串表示:

YY表示年份, MM表示月份, DD表示日子

YY 取值 '00-68' 转为 2000-2069

YY 取值 '70-99' 转为 1970-1999

YYYYMMDD或YYMMDD数值表示:

YYYY表示年份,YY表示年份,MM表示月份,DD表示日子

YY 取值 1-69 转为 2001-2069

YY 取值 70-99 转为 1970-1999

备注:可以使用CURRENT_DATE或者NOW()来获得当前系统日期

DATETIME类型表示方式

‘YYYY-MM-DD HH:MM:DD’字符格式或’YYYYMMDDHHMMSS’字符格式:

YYYY表示年份,MM表示月份,DD表示日子

HH表示小时,MM表示分钟,SS表示秒

EG:

'2017-8-31 11:49:49' '20170831114949'

‘YY-MM-DD HH:MM:DD’字符格式或’YYMMDDHHMMSS’字符格式:

YY表示年份,MM表示月份,DD表示日子

HH表示小时,MM表示分钟,SS表示秒

YY 取值 '00-68' 转为 2000-2069

YY 取值 '70-99' 转为 1970-1999

EG:

'17-8-31 11:49:49' '170831114949'

YYYYMMDDHHMMSS数值格式或YYMMDDHHMMSS数值格式:

YYYY表示年份,YY表示年份,MM表示月份,DD表示日子

HH表示小时,MM表示分钟, SS表示秒

YY 取值 1-69 转为 2001-2069

YY 取值 70-99 转为 1970-1999

20170831090906 170831090906

备注:也可以使用NOW()获得当前系统的日期时间

TIMESTAMP类型表示方式

基本和DATETIME相同,本质区别是时间范围不同;1970 - 2037

不同之处:

可以使用CURRENT_TIMESTAMP获得当前日期时间

无任何输入或者输入NULL将输入系统时间

二进制类型

分类

二进制类型 取值范围
BIT(M) M位二进制数据,M最大值为64
BINARY(M) 字节数为M,长度为0-M的定长二进制字符串
VARBINARY(M) 长度为0-M的可变长二进制字符串,字节数为长度+1
TINYBLOB 可变长二进制数据,最多255个字节
BLOB 可变长二进制数据,最多2^16-1个字节
MEDIUMBOLB 可变长二进制数据,最多2^24-1个字节
LONGBLOB 可变长二进制数据,最多2^32-1个字节

NULL值问题

NULL进行运算的结果还是NULL

如何选择数据类型

数值类型如何选择

确定范围: 大范围类型还是小范围类型

确定小数精度: 是否需要小数、浮点型、定点型

是否表示金钱: 使用decimal

字符类型如何选择

对速度要求高? 用CHAR

对存储大小有要求?用VARCHAR

大型文本? 用TEXT

多个字符选一个? ENUM

多个字符选多个? SET

日期类型如何选择

只存储年?日期?时间?日期时间?用YEAR、DATE、TIME、DATETIME

只需要小范围日期时间?TIMESTAMP

二进制类型如何选择

存储纯文本?用TEXT

存储二进制文件?用BOLB

posted @ 2022-09-01 08:37  重庆熊猫  阅读(802)  评论(0编辑  收藏  举报