열이 동일한 유형이지만 MariaDB 제약 조건이 잘못 형성되었습니다.
외부 키를 생성(변경)하는 중에 문제가 발생했습니다.
내 DB에는 (플라이웨이 마이그레이션을 통해 생성된) 두 개의 테이블이 있습니다.
커넥터(커넥터)
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_continue(커넥터)
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)에서는 작동하지만 통합 테스트(테스트 컨테이너, MariaDB 10.6.11)에서는 실패합니다.10.3.29를 사용하는 GH Actions에서도 실패하는데, 이는 로컬에서 작동하기 때문에 이상합니다.
UPD: 테스트 컨테이너의 mariadb 버전을 10.3.29로 설정해도 여전히 실패합니다.
UPD: 동일한 문자 집합 및 조합을 사용하도록 connector_preset 테이블을 변경했습니다.
ALTER IGNORE TABLE `connector_preset` DEFAULT CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_520_ci';
여전히 작동하지 않습니다.
테이블connector
문자 집합 utf8mb4와 collection utf8mb4_collection_ci를 사용하여 생성된 반면 connector_collection은 서버 기본 문자 집합과 collection을 사용하여 생성되었으며 명백히 다릅니다.
따라서 테이블을 올바른 문자 집합으로 변환해야 합니다.
변경하려는 시도는ALTER TABLE ... DEFAULT CHARACTER SET 'utf8mb4'
테이블에 대해 기본 문자 집합을 설정하지만 열에는 설정하지 않습니다.대신 다음을 사용하여 변환해야 합니다.
ALTER TABLE connector_preset CONVERT TO CHARSET utf8mb4 COLLATE utf8mb4_unicode_520_ci
언급URL : https://stackoverflow.com/questions/75373045/mariadb-constraint-is-incorrectly-formed-although-columns-are-of-the-same-type
'it-source' 카테고리의 다른 글
파이썬/판다를 사용하여 엑셀에서 색상 그라데이션을 만드는 가장 쉬운 방법은 무엇입니까? (0) | 2023.06.10 |
---|---|
Python은 변수가 목록에 있는 어떤 유형의 인스턴스인지 확인합니다. (0) | 2023.06.10 |
오류: Objective-C 모듈 'Firebase'를 빌드할 수 없습니다. (0) | 2023.06.10 |
Windows에서 NODE_ENV= 운영을 설정하려면 어떻게 해야 합니까? (0) | 2023.06.10 |
Vuex - 로컬 상태 복사본을 수정하면 변환 오류가 발생함 (0) | 2023.06.10 |