在mysql中添加外键(使用phpmyadmin)有问题。
ALTER TABLE `production_x_country` ADD FOREIGN KEY (`country`) REFERENCES `pmdb_0.3.12`.`countries`(`iso_3166_1`) ON DELETE CASCADE ON UPDATE CASCADE;#1215 -无法添加外键约束
根据一些研究和测试,我得出结论:CHAR (那个production_x_country.country字段)不是有效的外键字段类型--尽管我在mysql文档中没有发现任何提示。如果我将列类型更改为其他字符类型(如VARCHAR ),则该过程可以工作。
--一个类似的问题在这里得到了“解决”,,但是这个链接的答案不是关于类型问题,而是关于一个国家代码是一个主要的关键(对我来说非常有意义的):https://stackoverflow.com/a/1419235/4302731。
表说明:
CREATE TABLE IF NOT EXISTS `countries` (
`iso_3166_1` char(3) NOT NULL, <----- primary key to be referenced to
`name` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `countries` ADD PRIMARY KEY (`iso_3166_1`);
CREATE TABLE IF NOT EXISTS `production_x_country` (
`production` int(11) NOT NULL,
`country` char(3) CHARACTER SET utf8 NOT NULL <----- column that should hold the foreign key
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;有什么解决办法(是的,我可以继续使用varchar,但我不满意)?最重要的是:,有什么解释吗
谢谢你的帮助!
解决了-见下面我自己的答案
发布于 2014-11-28 08:09:27
解决了!这不是关于char字段类型,而是关于排序规则!
我喜欢使用UTF-8,主要是utf8_bin。我的主键排序也是这样的:
`iso_3166_1` char(3) CHARACTER SET utf8一旦我将主键的排序规则更改为"latin1_swedish_ci“,外键应用程序就可以工作了。引出一个问题:为什么主键字段的排序(也可能是外键字段的排序,还没有检查)很重要?
https://stackoverflow.com/questions/27184211
复制相似问题