gpt4 book ai didi

mysql - 错误 1059 : Identifier Name Too Long on Foreign Key Constraints from Existing Table

转载 作者:搜寻专家 更新时间:2023-10-30 20:09:20 25 4
gpt4 key购买 nike

我在生产数据库中有一些预先存在的表。当我运行 show create table existing_table 时,它显示了创建表所需的 SQL,其中涉及多个 CONSTRAINT FOREIGN KEY REFERENCES,涉及名称如下的约束:

_xxxxxxxxxxx_xxxxxxxxxxx_xx_f87560e38ebd0f6_fk_customer_customer_id

这看起来很正常,但是当我尝试创建一个像 new_existing_table 这样运行与 create table 查询中所示相同的 SQL 的 tmp 表时,我收到以下错误:

错误 1059 (42000):标识符名称“_xxxxxxxxxxxx_xxxxxxx_xxxxxx_xx_7435260ed6a242b0_fk_customer_customer_id”太长

如果这是生成原始表的 SQL,那么当我创建新表时它是如何失败的?即使我使表名非常短,如 tmp,我也会得到同样的错误。

我在 Amazon RDS 上使用 MySQL、InnoDB。

最佳答案

这看起来像是与 MySQL Bug #44541 相关的问题,已在 MySQL 服务器版本 5.1.69、5.5.31、5.6.11 和 5.7.1 中修复。

The length of internally generated foreign key names was not checked. If internally generated foreign key names were over the 64 character limit, this resulted in invalid DDL from SHOW CREATE TABLE. This fix checks the length of internally generated foreign key names and reports an error message if the limit is exceeded.

问题是,该错误允许创建具有无效定义的表,因此此处重要的服务器版本不是您要加载到的服务器版本——它是在何时何地运行的服务器版本该表已创建。除了防止新创建的表具有无效的自动生成标识符外,该修复没有做任何事情。

标识符是约束标识符,它的值不是特别重要——它只是用来在错误消息中告诉你即将被违反的外键约束……所以你可以删除它。唯一需要明确声明它的时候是自动生成的太大的时候。

来自 http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html ,您会注意到关键字 CONSTRAINT 是可选的,即使提供了,它后面的 symbol 仍然是可选的。 symbol 是给您带来问题的元素。它被限制为 64 个字符。一直都是,但由于错误,限制没有正确施加。

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

关于mysql - 错误 1059 : Identifier Name Too Long on Foreign Key Constraints from Existing Table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com