大佬们你们 Mysql 的数据库名称怎么分割的?

275 天前
 PeiXyJ

我公司数据库名称采用的是 小写 + 下划线 + 小写 例如 pj0001_prod,但是同事提出了异议说在某些软件使用下划线会出现异常(问了他什么软件又不说).

4615 次点击
所在节点    MySQL
31 条回复
PeiXyJ
275 天前
@xiangyuecn 直接打群架是吧
wyx119911
275 天前
通配符 _ 在 MySQL 中具有特殊含义, 如果数据库名中含有下划线 _
例如 GRANT ALL ONdb_1.* TO test_user;进行授权操作时,会导致 db01 ,db11 ,db21 ,…,db91 都被匹配。需要将_进行转译才行。
所以还是有坑的,那位同事可能之前看到过但具体想不起来是啥坑了
akira
275 天前
就是你这个习惯就行了, 已经是问题最少的方案了
seansong
275 天前
那就去掉下划线,直接连写,这样总不会有问题了吧🐶
Rache1
275 天前
@gam2046 #13 SQL Server 风格,用驼峰 😂
realpg
274 天前
你同事说的没错。库名不能用下划线,会有坑。我得想想是什么坑 记不清了
realpg
274 天前
@wps353 #1
@ResponseBody #2
@superrichman #3
@Ayanokouji #4
@lucasdev #5
@tairan2006 #7


人家说的是库名,不是表名

我这边我自己定的公司规范里,数据库名就明确写了不能用下划线,表名不能用减号,但是我不记得有什么坑让我这么规定的了 容我想想
zczy999
274 天前
@realpg #26 思索
realpg
274 天前
@wps353 #1
@ResponseBody #2
@superrichman #3
@Ayanokouji #4
@lucasdev #5
@tairan2006 #7
@zczy999 #28

我想了一天也没想起来 然后我刚去问了 chatgpt 可能有什么风险 在 gpt 的提示下 然后大概整明白了当初我为什么这么定的规范

MYSQL 中单下划线在很多场景识别为单字通配符,在赋权等场景,这样会导致可能的风险。
很多 ORM 会识别这个通配符,给你处理好,有些 ORM 并不会 这是风险 1

而且这个可能影响更大的是用各种管理工具或者裸写 SQL 进行运维时,会造成很多莫名其妙的问题
很多管理工具对这个的处理非常不好
HappyAndSmile
274 天前
不断提升自己,去了更好的公司后,就不会再遇到有这种问题的同事了
lucasdev
274 天前
@realpg #27 大家都知道说的是库名啊。文档里这么写的,哪个软件有问题那是它没有按照 MySQL 规范呗,这种软件还敢用嘛
"Certain objects within MySQL, including database, ... names are known as identifiers. " 这句里面包含 database ,然后 "Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)"

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

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

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

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

© 2021 V2EX