🛠️ 오늘의 오류
팀프로젝트 진행중 누락한 테이블이 있다는걸 확인하고 뒤늦게 테이블을 생성하려는데, 분명 문법에 맞게 작성한 CREATE문이 작동하질 않았다. GUI로도 생성해봐도 FK 지정이 되질 않았고 원인을 찾아 삽질을 시작했다.
Error Code: 3780. Referencing column 'mi_id' and referenced column 'mi_id' in foreign key constraint 'fk_member_coupon_mi_id' are incompatible.
에러 발생 원인
해당 오류는 참조하려는 컬럼과 해당 테이블의 컬럼. 즉 두 컬럼의 자료형이 다르거나, 제약조건의 이름이 겹칠때 발생 한다.
앞서 설명한 원인에 해당하지 않는다면 참조하려는 컬럼이 문자열 형식인 경우 character set이 동일한지 확인한다.
해결 방법
우선 두 컬럼의 자료형이 동일한 것을 확인 후, 나는 기존에있는 DB에서 테이블을 수정했으므로 같은 이름으로 정의가 된 제약조건이 있는지 해당 쿼리로 확인했다.
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = '테이블명';
위의 쿼리로 조회시 중복된 이름으로 외래키가 정의되어 있지 않았고, 다음으로는 아래 쿼리를 통해 두 컬럼의 character set을 확인했다.
show full columns from 테이블명;
잡았다!! 해당 컬럼이 두 테이블에서 character set이 달라 오류가 발생하고 있던 것
나는 추가로 생성할 테이블에 CHARACTER SET 명령어를 추가해 해결했다.
create table t_member_coupon (
mi_id varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci not null,
constraint fk_member_coupon_mi_id foreign key (mi_id) references t_member_info(mi_id)
);
'Etc > Error' 카테고리의 다른 글
[Spring] No converter found for return value of type (0) | 2023.07.26 |
---|---|
[Eclipse] Checkout conflict with files: org.eclipse.jgit.api.errors.CheckoutConflictException (0) | 2023.07.25 |