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
版权:本作品采用「不论是否商业使用都不允许转载,否则按3元1字进行收取费用」许可协议进行许可。
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16645227.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~