提问人:ebyrob 提问时间:5/25/2017 最后编辑:ebyrob 更新时间:9/15/2021 访问量:7088
如何增加最大标识符名称长度?
How to increase maximum identifier name length?
问:
表名、列名、索引名等...在 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 代码的代码更容易实现。
答:
正如其他人已经在评论中建议的那样,这可能无法做到。
但是,您不需要这样做。
以表名为前缀的列名是完全不必要的,因为 SQL 提供了可用于区分列的 . 语法。实际上,我认识的大多数程序员都会全心全意地同意,在每个列名前面加上它所属的表的名称会非常烦人。tablename
columname
以项目名称为前缀的表名也是不必要的,因为这就是目录/模式的用途。此外,大多数 RDBMS 都支持 . 语法。如果您有多个共享表的项目,并且您的 RDBMS 不支持跨目录关系,那么我建议您遇到项目重构问题,或者 RDBMS 选择问题,而不是表命名问题。catalogname
tablename
此外,如果您认为 64 个字符的标识符很短,您应该尝试 Oracle。哦,你会有的乐趣!
评论
companyname
评论
table_name.column_name