如何增加最大标识符名称长度?

How to increase maximum identifier name length?

提问人:ebyrob 提问时间:5/25/2017 最后编辑:ebyrob 更新时间:9/15/2021 访问量:7088

问:

表名、列名、索引名等...在 MySQL(和 MariaDB)中,它们的最大长度为 64 个字符。我怎样才能增加它?

在此处复制:MySQL中列名的最大长度

MySQL文档在这里:https://dev.mysql.com/doc/refman/5.7/en/identifiers.html

MariaDB文档在这里:https://mariadb.com/kb/en/mariadb/identifier-names/

麻烦的答案:切换到 PostgreSQL 并重新编译

背景:以表名为前缀的列名与以子项目名称为前缀的表名相结合。通常项目名称很短,但两个项目刚刚碰撞,其中至少一个会变得更长一些。

例:

/* One MySQL Instance for in-house applications called "MySQL" on port 3306.  
 * One MySQL schema (database / catalog) per application "intranet_website".
 * Several sub-project prefixes per application, example: "finance_"
 * Individual table-name: "invoice"
 * Specific column-name: "TotalAmount"  ****/
CREATE TABLE intranet_website.finance_invoice_tbl (
    -- ...
    finance_invoice_TotalAmount DECIMAL(20,2),  -- 27 chars
    -- ...
)

这可能看起来有些过分,但请考虑 Java 命名约定,甚至只是 .Net。

com.companyname.intranetwebsite.finance.invoice.getTotalAmount() // 63 chars
IntranetWebsite.Finance.Invoice.GetTotalAmount() // 47 chars

注意:我不能选择在列前面加上表名。但是,在少数情况下,这对于没有重新联接同一表的联接变得有点用处。我知道至少有一个具体的例子,由于这些前缀,编写 SQL 代码的代码更容易实现。

MySQL MariaDB 限制

评论

3赞 Adrian 5/25/2017
这是一个硬性限制,不能增加。如果可以,您在问题中链接到的文档将指示执行此操作的配置值。
0赞 Kitet 5/25/2017
这不是您问题的答案,但您不能为每个项目创建单独的数据库并适当命名吗?这至少会把项目名称排除在外
0赞 abeyaz 5/25/2017
你只能通过下载mysql源码,修改代码的必要部分,编译和制作来做到这一点。(如果可以的话:))
1赞 Dhruv Saxena 5/25/2017
也许问题在于正常化
0赞 Uueerdo 5/25/2017
可以肯定的是,您指的是开发项目还是数据库中的项目?因为如果你指的是数据库中表示的项目,你可能不需要为不同的项目提供单独的表。另外,当简单地完全限定列名 () 不再时,为什么要在所有列前面加上表名?table_name.column_name

答:

6赞 Mike Nakis 5/25/2017 #1

正如其他人已经在评论中建议的那样,这可能无法做到。

但是,不需要这样做。

以表名为前缀的列名是完全不必要的,因为 SQL 提供了可用于区分列的 . 语法。实际上,我认识的大多数程序员都会全心全意地同意,在每个列名前面加上它所属的表的名称会非常烦人tablenamecolumname

以项目名称为前缀的表名也是不必要的,因为这就是目录/模式的用途。此外,大多数 RDBMS 都支持 . 语法。如果您有多个共享表的项目,并且您的 RDBMS 不支持跨目录关系,那么我建议您遇到项目重构问题,或者 RDBMS 选择问题,而不是表命名问题。catalognametablename

此外,如果您认为 64 个字符的标识符很短,您应该尝试 Oracle。哦,你会有的乐趣!

评论

0赞 ebyrob 5/25/2017
列前缀是我在这个项目中打的一场仗。我输了。这是一个包含近 300 个表和大约十几个“子项目”的单个应用程序。实际上,我推动了子项目前缀,特别是考虑到与公司中的其他应用程序共享单个数据库实例的可能性。我希望在非常高的级别上使用架构/目录。每个应用程序一个,带有一些“共享”架构,也许每个部门一个。虽然,我想目录本身可以使用前缀......我仍然不喜欢近 100 个目录的想法。
0赞 Rick James 5/27/2017
@ebyrob - 是时候预热你的简历了吗?
0赞 ebyrob 5/27/2017
@RickJames 如果每次有人口述一个次要的风格指南(烦人的前缀)时我都会跳槽,我永远不会做任何事情。更一般地说,可能是我的教育需要一些关注。或者,如果我只是做错了,请帮忙!
1赞 Rick James 5/27/2017
这似乎比“小风格”问题更糟糕——如果它不适合可用空间,它似乎是一个障碍。(我不会努力尝试重新编译以增加 64。想想如果升级时会发生什么!
0赞 ebyrob 6/22/2017
@RickJames 我们决定尽可能选择较短的项目名称,到目前为止,这已经足够了。需要明确的是,您无疑会觉得 64 个字符对于任何“单个子标识符”(例如 .)来说“足够”了。从 java 类路径中,没有语言(不仅仅是 SQL)应该需要支持更长的标识符?或者 SQL 在需要 64 个字符的限制方面有什么特别之处?这是我们这个时代的 80 列吗?companyname