MySQL教程 - 数据类型(Data Type)
更新记录
转载请注明出处。
2022年9月1日 发布。
2022年9月1日 从笔记迁移到博客。
数据类型
数据类型概念
数据类型是一种数据的限制,规定数据的存储格式、表示方式、范围大小等
整型
分类
说明:声明为无符号数,加上UNSIGNED即可
表示方式
格式:
数据类型 (显示宽度)
EG:
INT(4) TINYINT(3)
注意:也可以不指定显示宽度,默认显示宽度为能显示该类型值最大值的宽度
浮点型
分类
指定显示范围
格式:
数据类型 (总长度,小数点后的长度)
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
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16645227.html