我在MySQL Workbench中尝试创建下表Tool时收到错误3780:
CREATE TABLE IF NOT EXISTS Recipe (
Recipe_ID int primary key,
Author varchar(50),
Recipe_name varchar(50),
Recipe_time int, # in minutes
Prep_time int,
Cook_time int,
Recipe_cal int,
Recipe_fat int,
Recipe_carbs int,
Recipe_protein int
);
CREATE TABLE IF NOT EXISTS Tool (
Tool_ID int primary key,
Recipe_ID int,
foreign key (Recipe_ID) references Recipe(Recipe_ID)
);
错误代码:3780外键约束“tool_ibfk_1”中的引用列“Recipe_ID”和被引用列“Recipe_ID”不兼容。我使用的是MySQL版本8。0.33,如SELECT version()所示;
我在Recipe上运行了DESCRIBE,结果如下:
Recipe_ID varchar(4) NO PRI
Author varchar(50) YES
Recipe_name varchar(50) YES
Recipe_time int YES
Prep_time int YES
Cook_time int YES
Recipe_cal int YES
Recipe_fat int YES
Recipe_carbs int YES
Recipe_protein int YES
我还运行了SHOW CREATE TABLE for Recipe。
'Recipe', 'CREATE TABLE `recipe` (\n `Recipe_ID` varchar(4) NOT NULL,\n `Author` varchar(50) DEFAULT NULL,\n `Recipe_name` varchar(50) DEFAULT NULL,\n `Recipe_time` int DEFAULT NULL,\n `Prep_time` int DEFAULT NULL,\n `Cook_time` int DEFAULT NULL,\n `Recipe_cal` int DEFAULT NULL,\n `Recipe_fat` int DEFAULT NULL,\n `Recipe_carbs` int DEFAULT NULL,\n `Recipe_protein` int DEFAULT NULL,\n PRIMARY KEY (`Recipe_ID`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci'
我还运行了DESCRIBE工具,但由于错误,工具还不存在。
我已经研究了一些关于这个问题的溢出线程,并尝试应用这个solution来处理排序规则和字符集。这并没有解决眼前的问题:
CREATE SCHEMA IF NOT EXISTS KITCHEN;
USE KITCHEN;
ALTER DATABASE Kitchen
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_520_ci;
据我所知,两个Recipe_ID都是int,因为当类型不匹配时,许多人都会遇到问题。我将感谢任何建议来解决这个问题。
2条答案
按热度按时间8i9zcol21#
在“Recipe”表中,“Recipe_ID”列的数据类型被指定为varchar(4),但是在“Tool”表中,“Recipe_ID”列的数据类型被指定为int。这种不一致性可能导致您看到的错误。
vjrehmav2#
我之前在Recipe中将Recipe ID设置为varchar(4)。我试图通过添加int来纠正Tool中外键RecipeID之间的类型不匹配,但由于表已经存在,因此没有进行更新。我通过删除带有varchar ID的Recipe并重新创建较新的Recipe来解决这个问题。