请教:数据库表达类型,用字符串还是数字

2022-08-15 11:40:51 +08:00
 NoKey

比如我有一条数据,这条数据有个类型字段,比如 主数据还是次级数据

这种场景下,我们表达类型可以用 1,2 也可以用字符串 main secondary

我考虑着,在不考虑存储容量的情况下,用哪种类型,对于数据库来说,是不是是一样的啊?

以前的话,服务器蛮贵的,很多时候要考虑容量,现在一般都不太考虑容量了

请教各位大佬,除了存储容量之外,哪种类型,会有性能影响不?

谢谢

3005 次点击
所在节点    程序员
20 条回复
lmshl
2022-08-15 11:44:17 +08:00
mysql / postgresql 都原生支持 enum type ,可以结贴了吧
brader
2022-08-15 11:47:19 +08:00
这类数据我自己以及见过比较多的是使用 tinyint 做状态
zmal
2022-08-15 11:48:21 +08:00
mysql 的 emun 蛮垃的,千万别用。
mysql 的话正常来说用 tinyint 就可以了。用什么类型更多是业务方面的考量,性能差距不大。
Leviathann
2022-08-15 11:48:29 +08:00
@lmshl mysql 老版本不支持
qW7bo2FbzbC0
2022-08-15 11:49:40 +08:00
实际我遇到的情况看来,数据库中很少用 enum 格式的,而且不止为何,不推荐使用 enum 格式。

我更推荐 int 或 varchar 这种直接的类型。

单就 int 和 varchar 来说,如果情况可以固定描述,我更倾向于 varchar 这种显式表意的方式

另,在 sof 上也有些人推荐使用 static class with const property 来取代代码中的 enum 类型
xtreme1
2022-08-15 11:51:45 +08:00
@qW7bo2FbzbC0
数据库 enum 你新增一次类型,就得改一次 ddl
lmshl
2022-08-15 11:58:11 +08:00
懂了,结论:别用垃圾 mysql 。
起码 postgresql 的 enum 只要不改顺序,新增类型都是瞬间完成的。
westoy
2022-08-15 12:02:12 +08:00
有一港一, 我用 pg 一样用 smallint ,enum 是咩?
mringg
2022-08-15 12:32:20 +08:00
如果没有排序、超高性能需求,字符串更直观些
swcat
2022-08-15 12:46:06 +08:00
我自己设计的话, 之前一般都是 tinyint, 总部那边同步过来的都是 char, 比如 currency, country, ap code, 状态
因为这个被叼过, 可读性比少存要重要
heyjei
2022-08-15 13:08:25 +08:00
我直接用 varchar ,比如字段 status 直接用 正常,停用等,要使用 123 ,你还得维护一套码表。
123qwerty
2022-08-15 13:15:36 +08:00
@lmshl 在存储大小(与个数相关)和不改顺序的情况下,mysql 也是瞬间完成的
debuggerx
2022-08-15 13:23:19 +08:00
用枚举,用其他的都是大聪明行为,不解释
ragnaroks
2022-08-15 13:28:19 +08:00
各种数据库实现的 byte 类型,实体类写好 getter/setter 转换关系
lovephpframework
2022-08-15 15:32:16 +08:00
肯定会影响性能啊,int 更快,建议用 tinyint,然后具体含义在 php 里用 const 定义好,写在 mysql 的注释里面基本没人看,业务改了之后也容易忘记改
nothingistrue
2022-08-15 16:01:52 +08:00
首先排除数据库的枚举类型——除非你明确使用一种数据库且这数据库对枚举类型支持的很好,否则遍地是坑。

如果你真得不考虑存储容量的话,用字符串是最省事和最可靠的,他能跟枚举无缝对接。但是事实上除了演示系统外没有不考虑容量的。就算你不考虑存储容量,也得考虑索引空间。就算上面都不考虑,( Java )枚举自身也可能会扩展成 value-name-detail 的字典形式。所以在适当的时候,这个适当的时候由你自己决定,还是要考虑用 tinyint 类型。
dcsuibian
2022-08-15 16:23:11 +08:00
倾向于字符串,对 DBA 更友好。

如果你对性能要求特别高,那用数字整形也可以。但从数据库里取出来的时候,要尽快转换成字符串或枚举。

最恶心的是那种从数据库到 json 都是数字的。
鬼知道这个数字代表什么,就算知道了,每次看到这个数字,自己脑袋里还得先 map 一下。
murmur
2022-08-15 16:23:26 +08:00
我们的 type 现在全是英文,枚举也是英文,做报表就知道这样的好处了,你如果全是 int 代表类型,没有编码表,做报表的想杀人
murmur
2022-08-15 16:24:03 +08:00
不对,type 是中文,utf8 环境拼音和英文没任何区别,换成英文多此一举短字符串果断中文
xuanbg
2022-08-15 16:34:11 +08:00
用数字不会写错,因为无论谁用这个字段都要先搞清楚 123 分别对应什么。直接存字符串的话就怕不小心拼写错了就对不上了。

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

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

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

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

© 2021 V2EX