创建(更改)外键时遇到问题。
我的数据库中有两个表(通过飞路迁移创建):
连接器(迁移)
create table if not exists connector
(
id char(36) not null,
# other fields omitted
primary key (id)
) DEFAULT CHARACTER SET 'utf8mb4'
COLLATE 'utf8mb4_unicode_520_ci';
connector_preset(迁移)
CREATE TABLE IF NOT EXISTS connector_preset
(
id CHAR(36) NOT NULL,
# other fields omitted
PRIMARY KEY (id)
);
我想在connector和connector_preset之间创建一个链接,所以我创建了另一个这样的迁移:
ALTER IGNORE TABLE `connector`
# `connector_preset`.`id`
ADD COLUMN IF NOT EXISTS `preset_id` CHAR(36),
ADD CONSTRAINT `fk_connector_preset_id` FOREIGN KEY (`preset_id`) REFERENCES `connector_preset` (`id`);
但它失败并出现以下错误:
SQL State : HY000
Error Code : 1005
Message : (conn=4) Can't create table `test`.`connector` (errno: 150 "Foreign key constraint is incorrectly formed")
Location : db/migration/...
Line : 34
Statement : ALTER IGNORE TABLE `connector`
# `connector_preset`.`id`
ADD COLUMN IF NOT EXISTS `preset_id` CHAR(36),
ADD CONSTRAINT `fk_connector_preset_id` FOREIGN KEY (`preset_id`) REFERENCES `connector_preset` (`id`),
这些列似乎属于同一类型。此外,由于某种原因,它在本地 k8s 集群(10.3.29-MariaDB)中工作,但在集成测试(testcontainers,MariaDB 10.6.11)中失败。在使用 10.3.29 的 GH 操作中也失败,这很奇怪,因为它在本地工作。
如果我将 testcontainers 中的 mariadb 版本设置为 10.3.29 - 它仍然失败。
尝试更改connector_preset表以使用相同的字符集和排序规则:
ALTER IGNORE TABLE `connector_preset` DEFAULT CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_520_ci';
还是不行
问题是失踪
在
connector_preset
表中。检查这个工作示例