2022 了,现在还是用 1 ,2 ,3 数字表示状态么,还是用英文表示呢
1
CEBBCAT 2022-03-17 01:01:52 +08:00 via iPhone 1
确实有点难舍难分,我两种都用过,string 易读怕写错,tinyint 省空间查数据头大
btw ,这个和语言是不是没有关系?我写 Go 多一点 |
2
swulling 2022-03-17 01:06:00 +08:00 via iPhone
除非性能敏感,我喜欢用 string ,没必要省那一点点空间牺牲 sql 的可读性。
|
3
lslvxy OP @swulling 我也比较喜欢用 string ,最近接了个老项目,数据库全是 12345 ,关键还没有数据字典和注释,全靠猜,真尼玛头大
|
4
westoy 2022-03-17 01:14:10 +08:00
要查询用 int , 否则随意
其实完全可以用个 hashmap 做封装啊 |
5
msg7086 2022-03-17 01:57:18 +08:00 2
不写 Java ,但我一般会搞一个 enum ,然后数据库里就用 int 来映射。
|
6
Bingchunmoli 2022-03-17 02:31:34 +08:00 via Android
@msg7086 写 java +1,我以为是规范,int 省内存太多了
|
7
pengtdyd 2022-03-17 02:49:15 +08:00
新手吧,有点开发经验的人都不会问这个问题
|
8
ericls 2022-03-17 07:03:46 +08:00
enum
|
9
MarioLuo 2022-03-17 07:58:09 +08:00 via Android
犹豫就用自己喜欢的那个,自从用了 mongo 就喜欢用枚举,数据库映射就是字符串,可读性高
|
10
aaniao002 2022-03-17 08:11:49 +08:00 via Android
我直接写中文状态+中文表头。 就是被其他 123456 项目迫害的。
|
11
nitmali 2022-03-17 08:29:17 +08:00
tinyint
|
12
bthulu 2022-03-17 08:36:44 +08:00
mysql 不是有 enum 类型么, 干么不用
|
13
LowBi 2022-03-17 08:45:02 +08:00 via Android
string 了,int 只能数字,而 string 还可以包含中文,数字等,不会限制太死
|
14
focuxin 2022-03-17 08:52:48 +08:00
数据库里 tinyint ,程序里就一个枚举类映射的事
|
15
seven123 2022-03-17 08:54:23 +08:00
2022 了,不用 enum 吗
|
16
wxw752 2022-03-17 09:01:56 +08:00
我还是习惯在 Java 里定义 enum ,数据库存 tinyint
|
17
VeryZero 2022-03-17 09:06:34 +08:00
Java:enum -> MySQL:tinyint
查询性能相差并不多。但是节约的沟通和转换成本就很可观。 |
18
banmuyutian 2022-03-17 09:13:23 +08:00 1
|
19
Rache1 2022-03-17 09:16:11 +08:00
代码里面用枚举,数据库存英文 (⊙ˍ⊙)
|
20
cando 2022-03-17 09:19:00 +08:00
用 tinyint 注释里维护 1-xx 2-xx
|
21
cco 2022-03-17 09:26:59 +08:00
看情况,如果几个数字就能搞定就存 tinyint ,如果需要知道这个字典的大概含义,存 varchar 。
|
22
jiangxiaoshui 2022-03-17 09:28:44 +08:00
tinyint
|
23
gitdoit 2022-03-17 09:30:00 +08:00
java 用枚举, 数据库用字符串; 枚举->数据库 jpa 默认用枚举名称映射. 优点是看 sql 语句的时候不用查 1 2 3 4 是什么意思了, 缺点是占内存. 不过无所谓,项目对性能不敏感
|
24
bthulu 2022-03-17 09:30:27 +08:00
@banmuyutian 改 DDL 有什么要紧的, 一句话的事, 都 mysql8 了, ddl 随便改
|
25
Paracosm 2022-03-17 09:30:56 +08:00
通过 enum 来映射吧,类里面会有相关注释的
|
26
wolfie 2022-03-17 09:33:12 +08:00
varchar(20),为了这点性能牺牲可读性太不值当了。
|
27
jptx 2022-03-17 09:36:31 +08:00
看表的预估数据量,如果数据量预估不会太大,且这张表涉及的接口等调用产生的数据量也不会很大,就存 varchar 增加可读性,代码中用枚举或者常量来存放这些状态枚举,如果数据量预估会持续增长或者肯定比较大,或者涉及到的接口、调用产生的传输数据量也比较大,存 tinyint 或者 int 减少空间占用
|
28
timethinker 2022-03-17 09:43:21 +08:00 1
如果你的表有几千万的数据,并且值是稀疏的,可枚举的,使用 int 会比 varchar 要少占用很多的存储空间,量变决定质变。
|
29
javlib 2022-03-17 09:44:07 +08:00
用 int varchar 都有个问题,如果不小心写入了一个范围外的值,代码就无法处理了,而且用 int 的可读性也很差。
MySQL 直接支持了 enum 类型,用 MySQL 的 enum 类型在数据库层面提供了约束,不会出现范围外的值,同时 enum 的可读性也更好。 https://dev.mysql.com/doc/refman/8.0/en/enum.html |
30
zzfer 2022-03-17 09:51:13 +08:00
Java 里用枚举类映射,数据库里是 tinyint
|
31
godleon 2022-03-17 09:51:26 +08:00
char(1)
|
32
Felldeadbird 2022-03-17 10:10:45 +08:00
enum 是最优解,但是我不怎么用。我用数字多。因为项目大部分状态是 0 和 1 为主。如果超过范围,按照业务复杂程度选择数字还是 string 。
|
33
SurfaceView 2022-03-17 10:40:44 +08:00
tinyint
|
34
konakona 2022-03-17 11:36:17 +08:00
如果状态值不多(比如只有 1 、2 个,或者不超过 5-6 个),tinyint ,结合模型字典对照得到字符串在程序中做比较和查询使用。
如果状态值在设计阶段就已经能够预估到未来存在难以维护的现象(比如 3 代表什么,5 代表什么,然后 3 被遗弃),建议 enum ,enum 的效果同上面提到的 tiny+程序内模型字段的作用一样。 反正没 varchar 什么事。 |
35
tt0411 2022-03-17 11:40:36 +08:00
看项目规模, 如果没有千万行记录的量级, 就用 varchar 吧
|
36
Vaspike 2022-03-17 11:40:48 +08:00
用枚举+int 就好
|
37
cweijan 2022-03-17 11:41:29 +08:00 1
我以前是使用数字, 现在改为了使用字符串, 然后 Java 代码中使用枚举. 原因是字符串更加直观, 一看英文就知道当前属于什么状态, 而数字还需要去看代码或文档才能知道. 有的人会说数字性能更好, 但数字比字符串好的一点点性能完全不如让数据直观实在.
|
38
zw1one 2022-03-17 14:06:17 +08:00
varchar 一把梭 方便得很 不差那点性能
|
39
remarrexxar 2022-03-17 14:30:28 +08:00
enum+varchar ,纯数据和代码可读性都更好些
|
40
chrosing 2022-03-17 14:50:45 +08:00
枚举对应数据库的 tinyint(3)
|
41
javapythongo 2022-03-17 14:58:00 +08:00
现在是用 varchar
|
42
lmmlwen 2022-03-17 15:02:11 +08:00
我怀疑这个论坛人的真实水平,可能只有菜鸡会上这个论坛吧,居然这么多人说用枚举,笑死人了
|
43
weizhen199 2022-03-17 15:42:52 +08:00
要不试试 bit
|
44
keepeye 2022-03-17 15:46:34 +08:00
居然这么多人说牺牲这点性能值得,这边牺牲一点那边牺牲一点,真当服务器不要钱啊
|
45
yibo2018 2022-03-17 15:49:43 +08:00
代码中肯定是用 enumerate ,方便管理使用
至于映射到 MySQL 是什么反而随意了,int varchar 都不差,MySQL 中的 enum 我没用过(没听过哈哈) 我觉得代码中一定要用 enumerate 去限制,这个很重要 |
46
raptor 2022-03-17 15:51:25 +08:00
其实吧,我通常用 CHAR ,固定一或两个字符可以表示很多状态了,也比 INT 直观一些,2 位 CHAR 比一个 64 位 INT 占空间还少,性能的话跟 INT 也没差,应该能比 VARCHAR 好。
|
47
dq19871123 2022-03-17 15:57:41 +08:00
考虑这个问题的前提是你的业务真的有那么大量,否则那点性能差异根本不是瓶颈,所以一般情况下你觉得什么顺手用什么,看什么顺眼用什么,甚至抓阄决定都可以。
|
48
binge921 2022-03-17 16:16:49 +08:00
数据量百万以上 建议 int 你会回来感谢我
|
49
sdxlh007 2022-03-17 16:19:51 +08:00
int+枚举
|
51
go522000 2022-03-17 17:54:00 +08:00
先收藏,蹲答案。。。以前习惯用 1234 来表达不同的状态,后来遇到有客户流程随便改,用数字很容易混乱,现在项目习惯用 varchar 加字典来表示。
|
52
jtwor 2022-03-17 17:57:49 +08:00
tinyint
|
53
jjianwen68 2022-03-17 18:03:02 +08:00
用什么 varchar ,定长不是用 char 更合适吗
|
54
documentzhangx66 2022-03-17 19:26:35 +08:00
@lmmlwen 微软的蓝屏代码,本质是就是枚举。你觉得你比微软强?证明一下。
|
55
documentzhangx66 2022-03-17 19:32:39 +08:00
楼上说用枚举其实才是最正确的。原因是,枚举的本质,是对数据与意义,做强一致性约束。这种约束能强迫大家统一数据与规范,能提高整个系统的正确性与可靠性。当然,万事万物都有缺点,枚举的缺点是效率低,具体一点是,每次使用时,都要先查一下;如果需要创建新的状态,还要走一个申请流程,还要查一下是否重复或冲突。
|
56
sampeng 2022-03-17 19:42:58 +08:00
无论如何都是 enum 。。。自从我好多年前知道有 enum 这样的类型后,再不会设计 int 型数据表示状态。
可读性,约束性,比一切都重要。改 ddl 再 2022 年了不要太简单。无论是流程和工具,都是非常 easy 的事。但是让我去看一个 sql 满屏幕的 xx=1 ,xx=3.。我日他先人。。。 |
57
jiom 2022-03-17 19:56:48 +08:00
Java 用枚举类映射->数据库里是 tinyint~也没什么不可读性的~
|
58
Suaxi 2022-03-17 21:32:02 +08:00
枚举 + varchar
|
59
ricky077 2022-03-17 23:15:42 +08:00
@sampeng 说实话,当量达到一定数量的时候,改 DDL 非常头疼,一个不到 1000 万级的大表,需要停服,一个字段数据库跑 10 几分钟
|
60
xuanbg 2022-03-18 07:04:33 +08:00
tinyint ,写好注释就完事。
|
61
CantSee 2022-03-18 11:06:16 +08:00
我们是有一个状态码表和状态码枚举类,业务表的状态根据这个来映射,字段类型用 tinyint 或 char 都可以
|
62
opengps 2022-03-18 11:14:10 +08:00
tinyint ,预留扩展枚举的余地
|
63
seakingii 2022-03-18 12:28:21 +08:00
肯定是 int,tinyint 类型.
性能和存储空间更重要.可读性可以靠文档来解决,但因为用字符串造成的性能问题很难用其它办法来解决. 如果你的系统完全不在意性能,才考虑用字符串 |
64
srx1982 2022-03-18 16:19:32 +08:00
都说 int 和 varchar 有性能差距,那么谁能说说性能差在哪?为什么会有性能差呢?
|
65
hhjswf 2022-03-18 18:07:13 +08:00
我见过 varchar 类型 1 、2 、3...😂
|
66
zoyua 2022-03-18 21:42:20 +08:00 via iPhone
tinyint
|
67
sun5244725 2022-03-19 03:08:06 +08:00
当你看到数据库的数据全是 123456 时,你就想用 String 了
|