본문 바로가기
MySql

MariaDB error 1005 : Foreign key constraint is incorrectly formed 해결하는 법

by 지민재 2023. 2. 17.
반응형
SMALL

MariaDB에 외래키를 적용하다가 errno: 150 "Foreign key constraint is incorrectly formed" 이러한 오류 났습니다.. ㅎ..

 

1. 데이터 타입이 일치여부를 확인했습니다. 

메인키가 VARCHAR(20)면 외래키도 VARCHAR(20)여야 합니다.

 

2. 기본키와 참조하려는 외래키가 모두 NOT NULL 체크여부 

 

3. 참조하는 키(Reference Key)가 기본키 혹은 유니크 여부?

 

모두 이상 없었습니다.. 그래도 계속 에러해결이 안되서 컬럼명에 오타가 있나 몇번이나 확인해봤는데 안되더라구요..

 

구글의 힘을 빌려 서치를 하다가 결국에 문제를 찾았습니다. !!

 

 

바로.. !

 

기본키에는 Charset 과 Collation 이 utf8mb4 로 되어있었고 외래키에는 utf8 로 되어있어서 에러가 생겼던 거 였습니다..

 

 

근데 왜 마리아 디비에선 utf8mb4 을 기본으로 설정되어 있었을까요?? 그리고 두개의 차이점이 무엇인지 궁금해서 찾아보았습니다. 

 

utf8mb4  와 utf8 차이점 

(참고 : https://cirius.tistory.com/1769)

MySQL, MariaDB, Postgresql, MSSQL, Oracle등등의  Database를 사용하면서 혹은 개발언어등에서 CHARSET = utf8로 세팅하고 사용한다.

언제부턴가 나는 MySQL, MariaDB를 사용할 경우 자연스럽게 CHARSET를  utf8mb4로 사용한다.

몇 년전에 채팅 서버에 관심을 가지게 되었는데, 그러다 보니 메세지 사용중 emoji를 알게 되었고 자연스럽게 utf8mb4를 사용하게 되었다.

결론부터 말하면 MySQL, MariaDB는 utf8로 세팅하는 경우 emoji문자가 입력되지 않는다. 이런 문제점을 해결하기 위해 utf8mb4 라는 charset이 나오게 되었다. 

 

 

댓글