sql数据类型有哪些:分为数值、字符、日期、特殊四大类

sql数据类型有哪些:分为数值、字符、日期、特殊四大类

前段时间做业务表建表的时候,被同事随口问了一句sql数据类型有哪些,当时脑子一下卡壳,明明天天在建表选字段类型,真要系统说出来反而说不全,后续连着改了三张数据表,踩了一堆选错数据类型的实操雷,慢慢零散摸清了日常开发里真正能用得上的所有sql数据类型。

最开始建用户信息表的时候,图省事,所有数字字段全都统一用了int。手机号直接存int,结果上线第一天就出问题,手机号开头的0直接被自动截断,一部分用户手机号数据直接缺失首位数字,排查日志排查了快两个小时才定位到是数值类型不能保存前置零。

后来才反应过来,数值类型根本不适合存带前置零的编号、手机号这类内容。日常开发里用到的数值类sql数据类型,细分就是整数型和小数型两大类。整数里面常用的有tinyint、smallint、int、bigint,区别只是存储范围不一样,tinyint占空间最小,适合存状态码、性别这种只有固定几个数字的字段;常规自增主键、普通数字编号直接用int就行;超大流水号、设备唯一编码才需要用到bigint。小数类型就是float、double和decimal,前两个精度不稳定,做金额计算一定会出现误差,但凡涉及钱款,一律只用decimal。

别盲目给文本字段统一设varchar(255)。

这是我之前一直有的坏习惯,不管字段存用户名、备注还是长文本介绍,全部拉满255字符。

字符类型是开发里使用率最高的一类数据类型,分变长和定长两种。char是固定长度,写入内容不足设定长度时,会自动补齐空格,一般只用来存身份证号、手机号这种长度完全固定的数据。varchar是可变长度,用多少占多少存储空间,日常用户名、地址、简短备注都靠它。还有text系列,普通长文本用text就够,超大篇幅的文章内容、接口返回原始报文才需要longtext,千万不要用大文本类型去存短内容,会白白浪费数据库存储空间。

上次做订单统计报表,直接用字符串存下单时间,后续按日期筛选、按月分组统计订单数据的时候,写出来的查询语句又长又难维护,索引也完全失效,查询速度慢了十几倍。

日期时间类的数据类型没有很多人想的那么复杂,常用的就三种。date只存年月日,适合只需要记录下单日期、生日这类不需要时分秒的场景;datetime完整保存年月日时分秒,日常绝大多数业务时间字段都用它;timestamp会跟随时区变化,跨时区项目慎用,普通业务系统尽量避开这个类型,减少后续时区错乱的麻烦。

还有一类容易被忽略的特殊数据类型,平时用得少,但特定场景离不开。boolean布尔类型,用来存是非状态,底层本质还是tinyint,直接存true和false就行;blob二进制类型,用来存放图片、文件这类二进制文件,不过现在行业基本都把文件存在对象存储,数据库很少直接存blob数据;enum枚举类型,提前限定好固定选项,比如订单状态、商品上下架状态,能从数据库层面杜绝脏数据写入。

一整天都在对着数据表修改字段类型,来回调整字段长度和归类,下班关上数据库客户端的时候,脑子里只剩下一件事。当初要是刚开始学建表的时候,老老实实分清每一类数据类型的适用场景,根本不用花费这么多时间返工数据表。

了解更多百科知识请访问 百科