当前位置:首页 > 问答 > 正文

MySQL里那些常见的数据类型,简单说说它们都是什么样的东西

在MySQL里,数据类型就像是给数据贴上的标签,告诉数据库这个盒子里装的是什么样的东西,是数字、文字、日期,还是真假值,这样数据库才知道怎么高效地存放和查找它们,下面我们就来聊聊这些常见的类型,用大白话解释一下它们都是啥。

我们说说最常用的数字类型,数字类型主要分两大类:整型和浮点型,整型就是不带小数点的整数,比如1,100,-5,MySQL提供了几种不同“大小”的整型,好比不同尺寸的箱子,TINYINT是个小箱子,能放很小的数,比如人的年龄(0到120多岁)或者是否开启(用0和1表示)都够用了,INT是个标准大小的箱子,最常用,像订单ID、用户ID这种数字,用INT基本没问题,BIGINT是个超大箱子,当你的数字特别特别大,比如要处理全国每个人的唯一标识符,INT可能装不下,就得用BIGINT了,浮点型就是带小数点的数,比如商品价格12.5,圆周率3.14,FLOAT和DOUBLE就是用来存这种数的,DOUBLE能比FLOAT存放更精确、范围更大的小数,但要注意,它们在进行计算时可能会有极微小的精度误差,所以像银行账户金额这种对精度要求极高的,一般不用它们,而是用另一种叫DECIMAL的类型,DECIMAL像是用字符串方式来存数字,可以指定小数点前有几位、小数点后有几位,所以计算起来非常精确,一分钱都不会差。(来源:基于MySQL官方文档对数值数据类型的通用描述)

MySQL里那些常见的数据类型,简单说说它们都是什么样的东西

接下来是字符类型,用来存放文本信息,最基础的是CHAR和VARCHAR,你可以把CHAR想象成一个长度固定的格子间,如果你定义CHAR(10),那么无论你存进去的名字是“张三”(2个字符)还是“李四”(也是2个字符),它都会占满10个字符的空间,不够的用空格补齐,这样找起来快,但可能浪费空间,VARCHAR则是个聪明的弹性容器,VARCHAR(10)表示最多能放10个字符,但如果你只存“张三”,它就只占2个字符的空间,节省地方,像用户名、地址这种长度变化很大的信息,通常用VARCHAR,如果一段文字特别长,比如一篇文章的完整内容,或者一条很长的产品描述,VARCHAR可能也hold不住了,因为它有长度上限,这时就要请出TEXT家族了,TEXT能存非常多的文字,像一本小说的一章都够用,它还有几个兄弟:TINYTEXT(小文本)、MEDIUMTEXT(中等文本)、LONGTEXT(超长文本),区别就是能存放的文字量一个比一个大。(来源:基于MySQL官方文档对字符串数据类型的通用描述)

然后是日期和时间类型,DATE最简单,只关心年月日,2023-10-27’,适合记录生日、订单创建日期,TIME只关心时分秒,14:30:00’,适合记录会议开始时间、跑步用时,DATETIME把前两者合二为一,既记录年月日,也记录时分秒,2023-10-27 14:30:00’,非常适合记录事件发生的具体时刻,像用户注册的准确时间戳,还有一个TIMESTAMP,它和DATETIME很像,也保存年月日时分秒,但它有个特点,就是通常用来记录数据行的最后修改时间,而且它的值会根据你所在的时区自动转换,而DATETIME不会,比如你在北京时间下午两点存了一条数据,TIMESTAMP会转换成标准时间存储,在其他时区查询时再转换回当地时区显示。(来源:基于MySQL官方文档对日期和时间数据类型的通用描述)

MySQL里那些常见的数据类型,简单说说它们都是什么样的东西

一些特殊的类型,ENUM类型像个选择题列表,比如你有一个性别字段,你提前定义好选项只能是‘男’或者‘女’,那么存数据时就不能存‘未知’(除非你把它也加入选项),这样能保证数据的规范性,避免出现乱七八糟的输入,SET类型则像是多选题,一个字段可以同时选择多个预定义的值,比如记录一个人的兴趣爱好,你可以定义选项为‘阅读’,‘音乐’,‘运动’,那么一条数据里可以同时存‘阅读,运动’,表示这个人有这两项爱好。(来源:基于MySQL官方文档对ENUM和SET数据类型的通用描述)

除了这些,还有专门存二进制数据的类型,比如BLOB,它可以存放图片、音频、视频等文件的原始二进制代码,数据库不关心内容是什么,只管存储,这和TEXT存储纯文本是不同的。(来源:基于MySQL官方文档对BLOB数据类型的通用描述)

选择合适的数据类型很重要,选对了,数据库跑得又快又省地方;选错了,可能就会又慢又占空间,还容易出错,基本原则就是:够用就好,不要一味求大,比如人的年龄用TINYINT就够了,没必要用INT;短文本用VARCHAR,很长的文本再用TEXT。