小白问两个数据库的问题

2023-01-04 15:48:20 +08:00
 unt
1. 字段类型有必要严格按照真实类型和长度来设吗,很多时候直接 varchar(255)不行吗,我知道存储的字节数不一样,速度不一样,但是一般的小表都是 50 个字段内,数据量也不大,现在软件硬件性能也够,varchar 的扩展性非常强,对于有些项目,设置 int,datetime 等反而是给自己挖坑。所以说:在建表时如何确定设定的数据类型。

2. 现在很多关系型数据是不是也是直接用 mongo 了,而不用 mysql 了
2268 次点击
所在节点    程序员
26 条回复
debuggerx
2023-01-04 16:02:27 +08:00
其实很多奇奇怪怪的问题和所谓优化建议,本质原因都是 MySQL(尤其是很多经验丰富的老手死守的老版本)太过垃圾……
littlewing
2023-01-04 16:05:11 +08:00
varchar (255) 完全么问题,只要别 char(255) 就行
corcre
2023-01-04 16:08:20 +08:00
2 不清楚, 1 的话我老东家(小作坊, 用的 sqlserver)就是用的 varchar 存 datetime, 每次需要做日期筛选的时候就想打人...特别是不知道谁做测试的时候没事就给我整几条"Wed Jan 04 2023 16:04:11 GMT+0800 (China Standard Time)", 所以我现在是 date/datetime 就按这个格式来, int 这些可能有扩展需求的可能会存成 float/decimal, varchar 这种就无所谓了, 反正就算留 255 用户也会给你塞爆, 用到的时候再加长度就好了...
seers
2023-01-04 16:09:23 +08:00
191 用的比较多
chenmobuys
2023-01-04 16:13:46 +08:00
用了 varchar 之后,感觉数据量大了查询会变慢
unt
2023-01-04 16:16:12 +08:00
@chenmobuys #5 小数据量根本无感知的
lwep
2023-01-04 16:17:06 +08:00
看业务需求吧,以前用 varchar 来存 int 然后遇到要 order by 的情况,int 型就能正确排,varchar 按位排,程序里转来转去麻烦死,后来就乖乖改 int 了😂
unt
2023-01-04 16:17:58 +08:00
@corcre #3 日期这种存 varchar 的话前后端(至少前端)肯定会校验的吧
chenmobuys
2023-01-04 16:18:28 +08:00
@unt 你要是不在乎那就随便用。
neoblackcap
2023-01-04 16:19:06 +08:00
@corcre sqlserver 帮你解决了一大票问题,MySQL 跟 sqlserver 比起来怕不是一个玩具。
然后 mongo 不是关系型数据库,传统的数据库现在依然是主流。mongodb 只能说你们对数据库很熟,对业务的理解也很深,那么才好根据自己的需求去选。
unt
2023-01-04 16:19:10 +08:00
@lwep #7 项目运行一段时间后,int 转 varchar 是完全无痛的吗,有没有坑
shinession
2023-01-04 16:21:46 +08:00
只有 OP 自己怎么弄都行, 团队合作的话不能由着性子来, 不然屎都不知道怎么屎的
unt
2023-01-04 16:23:36 +08:00
@shinession #12 自己的话自由度很高的,前期造成的错误也是自己买单,总而言之就是“愿意承担风险”。但是团队就不一样了,烦,你需要对别人和对公司负责
leonhao
2023-01-04 16:30:18 +08:00
1. 存储空间,性能差异非常大
2. 不同类型操作不同,两个 varchar 能直接加吗?
3. 约束

你这个问题类型类似于 Java 里所有变量的 type 都定义为 String
unt
2023-01-04 16:32:09 +08:00
@leonhao #14 变量不一样吧,差异巨巨巨巨巨大
leonhao
2023-01-04 16:36:58 +08:00
@unt
为啥不一样?按你的说法我也可以把 int 都定义成 String 。
sunjiayao
2023-01-04 16:38:09 +08:00
varchar(255) 加不了组合索引
lysS
2023-01-04 16:38:16 +08:00
@leonhao mysql 中类型约束是不严格的(普通模式),所以可以 '1' + '1', 不合法的一般作为初始值。mysql 中没有类型报错。
aweffr28
2023-01-04 16:42:35 +08:00
191 好好一些+1 避免 utf8mb4 编码导致的加索引问题
计算方法: Math.floor(768 / 4) -> 192, 取 191 。
lookStupiToForce
2023-01-04 16:43:06 +08:00
不在乎锁死自己的未来 /给自己或公司的未来添堵的话当然随便啦🤪
开发本来就是取舍,玩具类型的项目随你搞,要赚钱要给以后当轮子跑的项目不建议

工作经验没体验过技术债?欠多了要还的时候总有想穿越时空扇自己巴掌的想法的

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

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

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

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

© 2021 V2EX