有没高手总结下 mysql 字段设置的经验

2014-10-21 17:20:44 +08:00
 444683462
比如
@手机号码 varchar
@网络IP字段,除特殊情况一律用bigint来记录inet_aton值;
@时间相关字段:用int型时间戳;放弃使用datatime这样的时间类型
@能用int的,坚决不用bigint
@用DECIMAL代替FLOAT和DOUBLE存储精确浮点数
@ 使用TINYINT来代替ENUM类型

这种类似的经验之谈 还有没 或者哪里有文章总结一下
1937 次点击
所在节点    问与答
1 条回复
Sunyanzi
2014-10-22 08:40:21 +08:00
十五个小时了还是没人理 ... 你自己也该知道你这个问题问得有多没水准了 ...

字段的使用没有什么经验之谈 ... 这只是针对场景的个人习惯罢了 ...

没人说手机号码不能用 UNSIGNED BIG INT 存 ... 就像没人说 IP 不能用 CHAR(16) 一样 ...

手机号用数值型存的好处是省空间 ... 坏处是无法存加号及括号 ... 以及批量查询会慢些 ...

IP 用数值形存的好处依然是省空间 ... 坏处是存取和判断范围的时候都需要额外的运算 ...

至于时间相关字段 ... 也没人说必须以时间戳的形式存 UNSIGNED INT ...

MySQL 自己提供了许多很好用的时间操作函数 ... 为了存进整形字段而抛弃这些函数是愚蠢的 ...

说来当我看到你写出「能用 INT 就不用 BIGINT」这种说法的时候我就不准备继续回答了 ...

这就像说能用 VARCHAR 就不用 TEXT 一样 ... 何况你置 TINYINT 和 SMALLINT 于何处 ..?

这么说你是不是还应该推出能用 SMALLINT 不用 INT 能用 TINYINT 不用 SMALLINT ..?

先这样吧 ... 总而言之一句话 ... MySQL 的每种数据类型都有其存在的意义 ...

先弄清楚每种数据类型为什么存在以及你需要存储的数据会参与怎样的运算再来问吧 ...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/140562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX