表名,列名,索引名等...在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代码的代码更容易实现。
答案 0 :(得分:4)
可能无法完成,正如其他人已经在评论中提出的那样。
但是,你不需要这样做。
前缀为表名的列名完全没必要,因为SQL提供了tablename
。 columname
语法,您可以使用它来区分列。实际上,我认识的大多数程序员都会全心全意地同意为每个列名称加上它所属的表的名称前缀非常讨厌。
以项目名称为前缀的表名也是不必要的,因为这是目录/模式的目的。此外,大多数RDBMS支持catalogname
。 tablename
语法。如果您有多个共享表的项目,和您的RDBMS不支持跨目录关系,那么我建议您有一个项目重构问题,或者选择RDBMS问题,而不是表命名问题。
另外,如果你认为64个字符标识符很短,你应该尝试Oracle。哦,你将拥有的乐趣!