字段数据类型决定了可以向字段插入的数据内容,也决定了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数据类型格式范围长度
yearYYYY1901 ~ 21551个字节
dateYYYY-MM-DD1000-01-01 ~ 9999-12-313个字节
timeHH:MM:SS-838:59:59 ~ 838:59:593个字节
datetimeYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598个字节
timestampYYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 ~ 2038-01-19 11:14:074个字节

日期数据示例

某学生的出生日期: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类型;
  • 字段数据类型一般支持修改,但也建议在创建前慎重,不到万不得已尽量不修改;即使修改,也应该由低精度修改为高精度,否则可能会导致数据丢失;
  • 虽然数据库支持的数据类型很多,但尽量使用常用的数据类型;
picture loss