字段数据类型决定了可以向字段插入的数据内容,也决定了MySQL在存储数据时的方式,以及进行运算时可以使用的运算符。
在使用时,尽量选择与字段存储的数据内容相匹配的数据类型。
常用字段数据类型
常用字段数据类型分3大类:
- 数值类:tinyint、smallint、int、bigint、decimal
- 字符类:char、varchar、text、longtext
- 日期/时间类:date、time、datetime
数值类
数值类数据类型,主要用来存储数字。分为整数类型、小数类型两大类。
MySQL数据类型 | 类型 | 取值范围(有符号) |
---|---|---|
tinyint | 整数 | 1个字节 范围(-128~127) |
smallint | 整数 | 2个字节 范围(-32768~32767) |
mediumint | 整数 | 3个字节 范围(-8388608~8388607) |
int | 整数 | 4个字节 范围(-2147483648~2147483647) |
bigint | 整数 | 8个字节 范围(+-9.22*10的18次方) |
float | 单精度浮点小数 | 4个字节 单精度浮点型 |
double | 双精度浮点小数 | 8个字节 双精度浮点型 |
decimal(m,n) | 定点小数 | m:总位数(m<65);d:小数位数(n<30,n<m) |
整数类型的字段,可以添加auto_increment自增约束条件;
定点小数实际以字符串形式存储,适合精度要求较高的使用场景,比如货币、汇率等;
浮点小数虽然可以表示更大的数据范围,但在做算术运算及比较运算时,容易不准确;
整数数据示例:
一天中的天数:365天
班级中学生的人数:62人
学生的年龄:18岁
大厦的楼层:32层
某航班的座位数:158个
小数数据示例:
珠穆朗玛峰的高度:8848.86米
商品的价格:1088.52元
美元兑人民币的汇率:6.3735
某人的体温:36.8度
学生的考试分数:98.5分
字符类
字符类型主要用来存储字符串/文本数据。分为定长字符、变长字符等。当然,也可以存储图片、声音等二进制数据,但不太建议这么做。
MySQL数据类型 | 类型 | 长度 |
---|---|---|
char(n) | 定长字符 | 最多255个字符 |
varchar(n) | 变长字符 | 最多65535个字符 |
tinytext | 变长字符(短文本) | 最多255个字符 |
text | 变长字符 | 最多65535个字符 |
mediumtext | 变长字符(长文本) | 最多2的24次方-1个字符 |
longtext | 变长字符(长文本) | 最多2的32次方-1个字符 |
定长字符数据示例:
18位的身份证号
4位的年份
6位的邮政编码
变长字符数据示例:
新闻的标题
老师的姓名
新闻的正文
商品的评论
日期/时间类
日期/时间类型主要用来存储日期和时间数据。不同类型存储的格式及可存储的日期/时间范围也不太一样。
MySQL数据类型 | 格式 | 范围 | 长度 |
---|---|---|---|
year | YYYY | 1901 ~ 2155 | 1个字节 |
date | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 3个字节 |
time | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3个字节 |
datetime | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8个字节 |
timestamp | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 ~ 2038-01-19 11:14:07 | 4个字节 |
日期数据示例:
某学生的出生日期:1995-09-12
我国载人飞船上天时间:2003-10-15
时间数据示例:
每天早上的上班时间:9:00:00
秒表计时:00:05:00
学校每节课时长:00:45:00
时间戳数据示例:
下单时间:2022-03-29 13:32:45
数据类型使用Tips
- 根据字段数据类型的取值范围合理的选择使用;比如tinyint能表示-128~127的整数,那么如果有个字段需要保存820这样一个整数,就不能使用tinyint类型;
- 字段数据类型一般支持修改,但也建议在创建前慎重,不到万不得已尽量不修改;即使修改,也应该由低精度修改为高精度,否则可能会导致数据丢失;
- 虽然数据库支持的数据类型很多,但尽量使用常用的数据类型;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。