为什么辣么多人喜欢用 tinyint 而不用 enum?

2015-11-03 16:32:07 +08:00
 solaro

如题,同样的场景,字段是固定的,例如男女性别,做过辣么多项目,就没有一个用枚举的,全都是 tinyint ,而且也有很多人明明 id 不能为带符号的,创建表就是不愿意加上 unsigned ,难道我有强迫症?

12384 次点击
所在节点    MySQL
32 条回复
fengwuxin
2015-11-03 16:34:01 +08:00
能实现就行,干嘛纠结
yongzhong
2015-11-03 16:35:48 +08:00
你见过所有字段全用 varchar 的嘛,id,时间啥的全是 varchar
est
2015-11-03 16:35:54 +08:00
unsigned 不算强迫症,可以考虑改过来。

enum 移植性不如 tinyint 。
nigelvon
2015-11-03 16:38:38 +08:00
enum 后期修改维护什么的坑多。大部分人对这个都没有足够经验。规避风险还是用 tinyint 吧。
Zzzzzzzzz
2015-11-03 16:39:04 +08:00
google 搜索 enum is evil 就能找到一堆原因了。

unsigned 是 mysql 独有的特性, 不建议使用。
letitbesqzr
2015-11-03 16:42:24 +08:00
我们公司就 type status 之类的字段使用 "0 1 2 3 4 5" 来代表,统一使用枚举
lincanbin
2015-11-03 16:56:14 +08:00
可扩展性
kslr
2015-11-03 17:22:45 +08:00
@yongzhong 艾玛,我感觉存时间戳挺好用的 varchar (20), mysql 预设的感觉都不好用。
Felldeadbird
2015-11-03 19:29:26 +08:00
enum 坑大啊,查 sql 要写上引号,否则查询不了?
jaguar
2015-11-03 19:42:29 +08:00
全用 text 路过
letitbesqzr
2015-11-03 21:35:58 +08:00
@Felldeadbird hibernate 的话能自动处理
msg7086
2015-11-03 21:47:54 +08:00
为了兼容性。
你用了一堆 enum 要是回头说转到 postgresql 玩了难道整个系统返修一遍么……
(而且像 Rails 什么的早就支持在框架内自动映射数字到枚举了。
jhdxr
2015-11-03 22:50:12 +08:00
当你某天 BOSS 告诉你我们要在男和女之外增加一个『保密』时你就会觉得 enum 不如 tinyint 了。。。
(神马?保密就让值为 null ?那再加一个『人妖』好了


enum 在 alter table 时的开销巨大。哪怕你只是新增一个值, mysql ( 5.6 及 5.6 之前,因为我没研究过 5.7 )依然会重建整个表_(:з」∠)_
realpg
2015-11-03 23:02:43 +08:00
@kslr 时间戳不是应该 unsigned int 么 如果考虑到整型溢出的问题 unsigned bitint 就够了啊 这才 4 字节,你那 varchar 就 20 字节了
littlehz
2015-11-03 23:26:34 +08:00
@realpg int 存时间可读性差呀,每次查询出来都要记得用内置函数转换下。另外如果时间需要精确到毫秒的呢?
shenqiu15
2015-11-03 23:27:50 +08:00
看上面全用 text 或 varchar 的,只能说现在的年轻人啊,太浮躁了,学习一点关系型数据库知识有好处的。
raysmond
2015-11-03 23:28:45 +08:00
enum 经常用啊
realpg
2015-11-03 23:30:14 +08:00
@littlehz
没觉得可读性差啊 脑袋自带粗略转换功能
需要的话,毫秒时间戳也不是不行啊。

而且,从来没觉得有很多需要去数据库的界面直读时间串的,在任何程序界面都很好转换成可读的。

部分调试、维护场景,可以头脑粗略转换
littlehz
2015-11-03 23:49:35 +08:00
@realpg 当然不是说时间用 varchar 存,个人不喜欢用 int 存。 mysql 自己的 datetime 就不错,显示成字符串,存储占 8 字节。
wjfz
2015-11-04 01:03:56 +08:00
@kslr
用 varchar 存时间戳,当某条数据早于 2001/9/9 9:46:40 的时候排序会遇到问题。


@littlehz
如果这时候有个只显示年月日这种需求,转换起来可能没那么方便。

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

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

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

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

© 2021 V2EX