MySQL中的数据类型有很多,对于我们开发者来说主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型 | 大小 (bytes) | 有符号 (SIGNED) 范围 | 无符号 (UNSIGNED) 范围 | 描述 |
---|---|---|---|---|
TINYINT |
1 字节 | -128 到 127 | 0 到 255 | 非常小的整数 |
SMALLINT |
2 字节 | -32768 到 32767 | 0 到 65535 | 小整数 |
MEDIUMINT |
3 字节 | -8388608 到 8388607 | 0 到 16777215 | 中等大小的整数 |
INT /INTEGER |
4 字节 | -2147483648 到 2147483647 | 0 到 4294967295 | 标准整数 |
BIGINT |
8 字节 | -9223372036854775808 到 9223372036854775807 | 0 到 18446744073709551615 | 大整数 |
FLOAT |
4 字节 | -3.402823466E+38 到 3.402823466E+38 | 0 到 3.402823466E+38 | 单精度浮点数 |
DOUBLE |
8 字节 | -1.7976931348623157E+308 到 1.7976931348623157E+308 | 0 到 1.7976931348623157E+308 | 双精度浮点数 |
DECIMAL |
用户定义 | 用户定义 依赖于M(精度)和D(标度)的值 | 用户定义 依赖于M(精度)和D(标度)的值 | 精确的小数,用户定义精度 |
解释一下 M(精度)和D(标度) 假如有个数是 12.4546,精度就是数字总位数 6 ,标度就是小数点位数 4。
无符号整型适合年龄字段 – 不会出现负数且人的年龄不会太大
age tinyint unsigned;
分数 – 总分100分,最多出现一位小数
score double(4,1);
字符串类型
类型 | 大小 (bytes) | 描述 |
---|---|---|
CHAR |
0-255 字节 | 固定长度的字符串 (需要指定长度) |
VARCHAR |
0-65535 字节 | 可变长度的字符串 (需要指定长度) |
TINYBLOB |
最大 255 字节 | 不超过255个字符的小二进制数据 |
TINYTEXT |
最大 255 字符 | 短文本字符串 |
BLOB |
最大 65535 字节 | 二进制形式的长文本数据 |
TEXT |
最大 65535 字符 | 长文本数据 |
MEDIUMBLOB |
最大 16777215 字节 | 二进制形式的中等长度(大小)文本数据 |
MEDIUMTEXT |
最大 16777215 字符 | 中等长度的文本字数据 |
LONGBLOB |
最大 4294967295 字节 | 二进制形式的大型文本数据 |
LONGTEXT |
最大 4294967295 字符 | 大型文本数据 |
char 与 varchar 都可以描述字符串,char
是定长字符串,指定长度多长,就占用多少个字符(未使用部分会使用空格填充),和字段值的长度无关 。而varchar
是变长字符串,指定的长度为最大占用长度 。
相对来说,char 的性能会更高些,因为varchar需要根据存储的内容计算占用的空间。
username varchar(50); -- 用户名
gender char(1); --性别
IdCard char(19); --身份证
带BLOB
的是用来描述二进制数据的。可以存储一些文件,例如安装包、图片、视频或者音频,不过不推荐这样做(性能不高而且不方便管理)。
日期时间类型
类型 | 大小 (bytes) | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE |
3 字节 | 1000-01-01 到 9999-12-31 | ‘YYYY-MM-DD’ | 日期 |
TIME |
3 字节 | ‘-838:59:59’ 到 ‘838:59:59’ | ‘HH:MM:SS’ | 时间或持续时间 |
YEAR |
1 字节 | 1901 到 2155 | ‘YYYY’ | 年份 |
DATETIME |
8 字节 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | ‘YYYY-MM-DD HH:MM:SS’ | 混合日期和时间 |
TIMESTAMP |
4 字节 | 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC | ‘YYYY-MM-DD HH:MM:SS’ | 时间戳 混合日期和时间值 |
生日字段 birthday
birthday date;
创建时间 createTime
createtime datetime;
本篇仅介绍了开发中常见的数据类型,MySQL 官方文档详细介绍了各种数据类型。
有关更多详细信息和其他数据类型的描述,请参考 MySQL 8.0 官方文档。这里可以找到所有数据类型的完整介绍和使用指南。