【发布时间】:2010-11-24 20:20:37
【问题描述】:
我在 InnoDB 中有一个使用基于 VARCHAR 的 ForeignKey 的表:
CREATE TABLE `portal_equity` (
`isin` varchar(12) NOT NULL,
....,
PRIMARY KEY (`isin`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8
另一个表对该表有 ForeignKey 约束:
CONSTRAINT `equity_id_refs_isin_2581bb1d` FOREIGN KEY (`equity_id`) REFERENCES `portal_equity` (`isin`)
我需要更改主键 VARCHAR 列的长度,所以我做到了。现在,每次我想从“portal_equity”表中引用 isin 超过原始长度 12 的行时,我都会收到以下完整性错误。
表
investtor.portal_equitypastvalue的外键约束失败: 约束equity_id_refs_isin_7eed44e7外键 (equity_id) 参考portal_equity(isin) 尝试在索引portal_equitypastvalue_equity_id_6e7526e1元组中添加子表: 数据元组:3个字段; 0:长度 12;十六进制 304c55303332333133343030; asc 0LU032313400;; 1:长度 3;十六进制 8fb578;升 x;; 2:长度 4;十六进制 8001398a; asc 9 ;;但是在父表
investtor.portal_equity中,在索引PRIMARY中,我们能找到的最接近的匹配是记录: 物理记录:n_fields 9;紧凑的格式;信息位 0 0:长度 13;十六进制 304c5530333233313334303036; asc 0LU0323134006;; 1:长度 6;十六进制 000000005139;升Q9;; 2:长度 7;十六进制 800000002d0110;升序 - ;; 3:长度 4;十六进制 61736466;升序自卫队;; 4:长度 4;十六进制 80000050;升序 P;; 5:长度 3;十六进制 736466;升序自卫队;; 6:长度 4;十六进制 80000001;升序;; 7:长度 2;十六进制 4144;升序广告;; 8:长度 0;十六进制;升序;;
我需要重新生成所有外键约束吗?这似乎有点过分了。这种行为/错误是否记录在某处?
【问题讨论】:
标签: mysql foreign-keys innodb varchar