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

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

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

12384 次点击
所在节点    MySQL
32 条回复
leebo
2015-11-04 02:01:52 +08:00
我觉得还是迁移问题吧
Delbert
2015-11-04 07:15:34 +08:00
我记得我用 bigint 存的时间戳,输出的时候爱怎么转换怎么转换。
MrJing1992
2015-11-04 08:44:37 +08:00
移植和迁移
Chappako
2015-11-04 08:50:00 +08:00
看来我一直用 enum 和 unsigned 没什么好处…… 还好现在开始用 sqlalchemy 不用考虑这些了
Infernalzero
2015-11-04 09:26:46 +08:00
这和时间用 bigint 存而不用 date 或者 timestamp 是一个道理
lostsnow
2015-11-04 09:55:43 +08:00
说个邪恶的理由吧, 也许性别有一天变的不止男女, 至于 type/status 之类的字段 变化的可能性会更高
Mac
2015-11-04 10:45:39 +08:00
我会说我用 char(2)来做么,是,否。。。。
zjqzxc
2015-11-04 12:02:22 +08:00
Facebook 包含了 56 种非传统性别
http://www.guokr.com/article/438003/
如果哪天老板想不开也想跟国际接轨的话,画面还是比较美的。

曾经有个知乎段子:大意是说有个字段原本只有两种可能的值,开始时候偷懒就 true/false 了,后来需求改了,这个字段可能有三种值了。。。
varnotfound
2015-11-04 16:54:54 +08:00
用 mysql 的 enum 代替字符型的值是蛮好的,排序似乎不怎么方便吧;对于 tinyint 的列,你用 enum 来枚举值不会混乱么?而且 tinyint 占用的空间也不大,对于开发来说用 tinyint 还是比较愉快的

至于数据类型的问题, mysql 执行的建表语句,并不是你输入什么就给你执行什么, mysql 会帮你优化数据类型后再建表( mysql 认为你定义的数据类型不够好,会自动帮你换掉的, innodb 下可以试试看),你可以用"show create table 表名 "看看你实际创建表的语句
sorra
2015-11-04 17:05:47 +08:00
Hibernate 默认是 自动转 int ,按声明顺序
mko0okmko0
2015-11-04 19:03:03 +08:00
雖然各種資料庫都用很久了,最後都會選擇主流資料庫都能互相遷移的欄位,又因為 SQLite 沒有時間欄位,又遇到跨時區主機同步問題,時間欄位乾脆用浮點數欄位存 utc 秒時間,小數點存毫秒,毫秒都會小誤差就是,
cszchen
2015-11-04 21:30:55 +08:00
tinyint 的性能和 enum 差不多,用 tinyint ,程序更容易扩展,所以一般需要用枚举的字段,我全部用 tinyint

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

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

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

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

© 2021 V2EX