숑숑이의 개발일기
article thumbnail

🛠️ 오늘의 오류

팀프로젝트 진행중 누락한 테이블이 있다는걸 확인하고 뒤늦게 테이블을 생성하려는데, 분명 문법에 맞게 작성한 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)
);
profile

숑숑이의 개발일기

@숑숑-

풀스택 개발자 준비중입니다