V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
PeiXyJ
V2EX  ›  MySQL

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

  •  
  •   PeiXyJ · 1 天前 · 1800 次点击

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

    31 条回复    2024-12-15 00:15:42 +08:00
    wps353
        1
    wps353  
       1 天前   ❤️ 2
    下划线一般不会有问题,中横线倒是有问题
    ResponseBody
        2
    ResponseBody  
       1 天前 via iPhone   ❤️ 11
    回复他

    “在你写的软件里会出现异常是吗😏”
    superrichman
        3
    superrichman  
       1 天前   ❤️ 4
    下划线都有问题。。。这同事新来的吧

    但凡看一眼 mysql 自带的`mysql`库的结构都不会这么说,表设计完全可以参考它
    Ayanokouji
        4
    Ayanokouji  
       1 天前   ❤️ 1
    他菜,一楼说的对,中划线有问题
    lucasdev
        5
    lucasdev  
       1 天前   ❤️ 2
    一楼说的对,下划线放心用,怎么可能有问题: https://dev.mysql.com/doc/refman/8.4/en/identifiers.html
    impanghu
        6
    impanghu  
       1 天前
    用的 SQLSERVER ,驼峰
    tairan2006
        7
    tairan2006  
       1 天前   ❤️ 2
    下划线没有任何问题
    shadowyue
        8
    shadowyue  
       1 天前
    @ResponseBody 就喜欢你这种说话好听的同事
    RyougiShiki
        9
    RyougiShiki  
       1 天前
    可以参考 django 框架的习惯,模块名_表名,小写, 下划线没有问题。
    gerefoxing
        10
    gerefoxing  
       1 天前   ❤️ 2
    下滑线不会有问题,反而-这种才不建议
    huzhizhao
        11
    huzhizhao  
       1 天前
    他写的软件可能有问题
    Akikiki
        12
    Akikiki  
       1 天前
    开发环境如果域名里写 下划线 倒是会有问题
    gam2046
        13
    gam2046  
       1 天前   ❤️ 1
    唔,假设说,不用下划线的话,那么用什么呢?
    空格?中划线?还是$#@%这种异教?

    看来看去,还是只有下划线这一种
    IvanLi127
        14
    IvanLi127  
       1 天前
    绝了,下划线有问题的话我用过的 ORM 全部完蛋。话说除了下划线还有啥常见的分法
    lance07
        15
    lance07  
       1 天前
    听他的, 问问他想怎么分割
    kk2syc
        16
    kk2syc  
       1 天前   ❤️ 1
    下划线是大部分情况下最稳妥的方案。
    用驼峰会有个问题就是`lower_case_table_names`参数,当值设为 1 时,MySQL 将忽略表名和数据库名的大小写。
    fgwmlhdkkkw
        17
    fgwmlhdkkkw  
       1 天前   ❤️ 1
    打一架!打一架!打一架!打一架!打一架!😡
    poltao
        18
    poltao  
       1 天前
    这都能成为问题,看来你们公司挺闲的
    xiangyuecn
        19
    xiangyuecn  
       1 天前
    那就采用中文命名,打架都省了
    PeiXyJ
        20
    PeiXyJ  
    OP
       1 天前   ❤️ 1
    @poltao 哈哈哈也没有,主要现在服务器要迁库...所以我们就又讨论了一下...
    PeiXyJ
        21
    PeiXyJ  
    OP
       1 天前
    @xiangyuecn 直接打群架是吧
    wyx119911
        22
    wyx119911  
       1 天前
    通配符 _ 在 MySQL 中具有特殊含义, 如果数据库名中含有下划线 _
    例如 GRANT ALL ONdb_1.* TO test_user;进行授权操作时,会导致 db01 ,db11 ,db21 ,…,db91 都被匹配。需要将_进行转译才行。
    所以还是有坑的,那位同事可能之前看到过但具体想不起来是啥坑了
    akira
        23
    akira  
       1 天前
    就是你这个习惯就行了, 已经是问题最少的方案了
    seansong
        24
    seansong  
       1 天前
    那就去掉下划线,直接连写,这样总不会有问题了吧🐶
    Rache1
        25
    Rache1  
       1 天前
    @gam2046 #13 SQL Server 风格,用驼峰 😂
    realpg
        26
    realpg  
       14 小时 26 分钟前
    你同事说的没错。库名不能用下划线,会有坑。我得想想是什么坑 记不清了
    realpg
        27
    realpg  
       14 小时 24 分钟前
    @wps353 #1
    @ResponseBody #2
    @superrichman #3
    @Ayanokouji #4
    @lucasdev #5
    @tairan2006 #7


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

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

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

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

    而且这个可能影响更大的是用各种管理工具或者裸写 SQL 进行运维时,会造成很多莫名其妙的问题
    很多管理工具对这个的处理非常不好
    HappyAndSmile
        30
    HappyAndSmile  
       4 小时 17 分钟前
    不断提升自己,去了更好的公司后,就不会再遇到有这种问题的同事了
    lucasdev
        31
    lucasdev  
       3 小时 7 分钟前
    @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)"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 19:23 · PVG 03:23 · LAX 11:23 · JFK 14:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.