我已经在Stack Overflow上阅读了很多关于这个错误的答案,但是没有一个答案似乎能够帮助我解决问题。
我遇到的错误是:
#1215 - Cannot add foreign key constraint
当我执行
show engine innodb status
命令时,返回如下信息:
以下是涉及到的表(我正在创建一份脚本,并且错误发生在 SQL 执行期间)。无法在引用的表中找到索引,其中引用列出现为第一列,或者表格和引用表格中的列类型不匹配。请注意,ENUM 和 SET 的内部存储类型在使用 >= InnoDB-4.1.12 创建的表中已更改,在旧表中的这些列不能被新表中的这些列引用。
CREATE TABLE IF NOT EXISTS customer_type (
customer_type_id int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(128) NOT NULL,
sort int(11) NOT NULL,
is_active tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (customer_type_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS location (
location_id int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
email varchar(255) DEFAULT NULL,
phone varchar(32) DEFAULT NULL,
address varchar(128) DEFAULT NULL,
city varchar(255) DEFAULT NULL,
postal_code varchar(10) DEFAULT NULL,
shipping_cost float unsigned DEFAULT NULL,
is_active tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (location_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS customer_type_location (
customer_type_id int(11) unsigned NOT NULL,
location_id int(11) unsigned NOT NULL,
PRIMARY KEY (customer_type_id,location_id),
FOREIGN KEY (customer_type_id)
REFERENCES customer_type(customer_type_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (location_id)
REFERENCES location(location_id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我不理解的是为什么它说我需要在引用列上创建索引,因为您可以清楚地看到引用列是主键,应该自动创建索引。 所以错误对我来说似乎没有意义。
我尝试了大部分来自这个问题答案的建议,但都没有帮助。
过去我一直使用PostgreSQL,所以不太熟悉大多数MySQL错误,但这个项目要求我使用MySQL。 任何帮助将不胜感激。
show variables where variable_name in ('innodb_version','version_comment')
是什么意思? - Drewutf8_general_ci
,所以我将其删除并使用排序规则utf8_unicode_ci
创建了数据库,这似乎解决了问题。因此,数据库排序规则需要与表格排序规则匹配,这似乎不是很清楚。谢谢! - Sehael