Mysql字段类型选取

前言

在一个愉快的周末,一条咸鱼正爬在床上愉快的玩着游戏,突然接到了同事的一个钉钉电话,抛出了这样的一张图片,只见这条咸鱼艰难的翻了下身,打开了电脑。我不想说话
看到这个异常,这条咸鱼心里默默的笑了笑,简直so easy
数据库都不用看(稳妥起见还是看了一眼)果然跟料想一样:字段是varchar类型且长度太小,于是顺手就写出了如下sql
alter table merchant_info modify column supply_image longtext;
问题解决后,这条咸鱼开始纠结此处是不是用text类型或者是调整varchar的长度会更好一点。
最后这条咸鱼打开了"高性能mysql第三版",跳进了知识的海洋。

mysql字段类型

mysql中的数据类型大致可分为数值型(整数及浮点型)、字符型、日期型、位数据类型、特殊类型。这里只分析一些常见的数据类型

整数类型: tinyint、smallint、int、bigint

  • 整数类型较为简单、除了取值范围有所不同外,还拥有一个可选的unsinged属性表示不可以为负值。此属性开启后可以提高一倍的上限。例如tinyint的取值范围为[-128~127],开启此属性后的取值范围为[0 ~ 255]

浮点型:float、double、decimal

  • float、double进行运算时采取的是近似运算(四舍五入),而decimal则是采用精确计算,因此decimal类型更适用于财务相关的数据。decimal类型字段计算或存储时开销略大于double合float,因此在数据量非常大的情况下还可以考虑采用bigint代替decimal。

字符型 :char、varchar、blob、text、longtext

  • char类型的长度是固定的,mysql根据定义的长度分配空间,char值存储时会根据需要采用空格进行填充,查询时会清除末尾的空格。char通常适用于存储定长的字段(如UUID生成的32位随机数,密码的MD5值等),同时因为char分配的空间是固定的,因此当char类型字段频繁发生变化时不会因为页分裂从而产生额外的开销。对于非常短的列char比varchar在存储上也更有优势,例如只需要存一个状态标识Y或者N,此时char(1)只占用1个字节,varchar(1)则需要占用两个字节(另一个字节用于保存长度)
  • varchar类型是最常见的字符串数据类型,用于存储长度可变的字符串。因为varchar是根据字段内容决定空间占用的大小,所以当字符串最大长度远大于平均长度时更节省空间。因为varchar的长度是可变的,因此需要1~2个字节用于记录该字段的长度(列长度大于255时占用两个字节)。varchar类型的字段在update时可能会出现空间碎片、页分裂现象略微降低update效率。mysql最大允许只允许每行数据占用65535个字节,因此varchar的最大长度也受此限制。
  • blob与text都用于存储过长的字符串数据类型,且都不支持索引,其不同点是blob存储的是二进制数据,没有规定排序规则及字符集,而text有排序规则及字符集。text按照max_sort_length的配置进行排序

数据类型选取规则

  • 更小的通常更好
    在保证业务正常的情况下,更小的数据类型通常占用更少的空间,所以效率更高。
  • 简单的更好
    简单的数据类型效率更高,例如整数型操作效率通常要高于字符串操作
  • 尽量避免使用null值
    null值使得索引、排序、比较都更为复杂。

最后这条咸鱼爬上岸后,立马把supply_image字段的数据类型改为了varchar(1000),然后回过头对你说“老铁 先别走 过来点个赞”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲得码黛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值