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

eby*_*rob 3 mysql limits mariadb

表名称、列名称、索引名称等...在 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
    -- ...
)
Run Code Online (Sandbox Code Playgroud)

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

com.companyname.intranetwebsite.finance.invoice.getTotalAmount() // 63 chars
IntranetWebsite.Finance.Invoice.GetTotalAmount() // 47 chars
Run Code Online (Sandbox Code Playgroud)

注意:我没有选择为列添加表名前缀。然而,在某些情况下,这对于无需重新连接同一个表的连接来说几乎没有什么用处。我知道至少有一个具体实例,由于这些前缀,编写 SQL 代码的代码更容易实现。

Mik*_*kis 6

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

但是,您不需要这样做

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

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

另外,如果您认为 64 个字符标识符很短,您应该尝试 Oracle。哦,你会享受到乐趣!