2017-05-24 72 views
0

表名,列名,索引名等...在MySQL(和MariaDB)中,它们的最大长度为64个字符。我该如何增加呢?如何增加最大标识符名称长度?

复制此:Maximum length of a Column name in MySQL

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

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

麻烦答案:切换到PostgreSQL和recompile

背景:以名称为前缀的列名以及以子项目名称为前缀的表名。通常项目名称很短,但有两个相互冲突,至少其中一个会变得更长。

例子:

/* 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 naming conventions,甚至只是.NET。

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

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

+1

这是一个硬限制,它不能增加。如果可能,在问题中链接到的文档将指示配置值。 – Adrian

+0

这不是你的问题的答案,但不能为每个项目创建单独的数据库并将其适当地命名?这至少需要项目名称 – Kitet

+0

您只能通过下载mysql源代码,修改代码的必要部分,编译并制作。 (如果你可以:)) – abeyaz

回答

3

它可能不能完成,正如其他人已经在评论中提出的建议。

然而,你应该不是需要做到这一点。与表名前缀

列名是完全没有必要的,因为SQL提供了tablenamecolumname您可以用来区分列的语法。实际上,我知道大多数程序员会全心全意地同意在每个列名前加上它所属的表的名字将是非常烦人

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

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

+0

列前缀是我参与这个项目的战斗。我输了。这是一个包含近300个表格和大约十几个“子项目”的单一应用程序。实际上,我推送了子项目前缀,特别是考虑到与公司中的其他应用程序共享单个数据库实例的可能性。我想要在很高的层次上使用架构/目录。每个应用程序一个,带有几个“共享”模式,或许每个部门一个。虽然,我想目录本身可以使用前缀......我仍然不赞成近100个目录的想法。 – ebyrob

+0

@ebyrob - 时间来温暖你的简历? –

+0

@RickJames如果每次有人口授一个小样式指南(烦人的前缀),我就会跳船,我从来没有做任何事情。更一般地说,这可能是我的教育需要一些关注。或者如果我只是做错了,帮助! – ebyrob