今儿跟大家唠唠我在数据库里折腾 `mediumint` 的那点事儿。前段时间,我不是接个项目嘛需要设计一个数据库,里面有个字段是用来存年龄的,我想着这年龄也不能太大,用 `tinyint` ,怕以后万一哪天政策变,人的寿命延长,`tinyint` 不够用;用 `int` ,又觉得有点浪费,毕竟年龄这玩意儿,一般来说,一百多岁也顶天。这时候,`mediumint` 就进入我的视线。
初步探索
我对 `mediumint` 也不太熟悉,只知道它占 3 个字节,比 `int` 的 4 个字节少一点。于是我就在本地的测试数据库上建张表,搞个 `mediumint` 类型的字段,试着插几条数据,看看效果怎么样。
发现问题
插数据的时候,一切正常,我当时还美滋滋地想,这 `mediumint` 还挺好用,既省空间,又能满足需求。可是,当我用一些数据库管理工具查看表结构和数据的时候,问题来,这个 `mediumint` 字段,它显示的长度居然是 8 或者 9,我当时就懵,这是咋回事?说好的 3 个字节?
深入研究
为搞清楚这个问题,我就去查资料,翻文档。这一查才知道,原来 `mediumint(M)` 里的这个 M,它并不是用来限制存储范围的,而是用来控制显示宽度的。也就是说,`mediumint(3)` 和 `mediumint(8)`,它们能存的数据范围是一样的,都是 -8388608 到 8388607(无符号的话是 0 到 16777215)。这个 M 主要是配合 `ZEROFILL` 属性使用的,比如说你定义一个 `mediumint(4) ZEROFILL` 的字段,然后你插入一个数字 1,它显示出来就会是 0001,前面给你补零,补到 4 位。
实际验证
知道原理后,我就动手验证一下。我把那个 `mediumint` 字段改成 `mediumint(4) ZEROFILL`,然后插入一些数据,果然,显示的时候,不足 4 位的数字前面都给我补零。这下我才算彻底明白 `mediumint` 的用法。
总结
- 我把数据库里的那个字段改回 `mediumint`,没有指定长度,也没有加 `ZEROFILL`,因为我这个项目里,年龄字段不需要补零,显示宽度也没啥用。经过这回实践,我对 `mediumint` 的认识也更深刻,以后再遇到类似的场景,我就知道该怎么选择。
这事儿也让我明白一个道理:实践出真知。有些东西,光看文档,看别人怎么说,还是不够的,得自己动手试试,才能真正理解它的原理和用法。好,今儿就跟大家分享到这儿,希望我的这点经验能对你们有所帮助。