728x90
문제 발생
개발집 프로젝트를 배포 중 아래와 같은 오류를 만났다.
Error creating bean with name 'dataSourceScriptDatabaseInitializer'
defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]:
Invocation of init method failed;
nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException:
Failed to execute SQL script statement #8 of class path resource [db/schema.sql]:
create table MEAL_FOOD_TB (
MEAL_FOOD_PK bigint auto_increment primary key,
CREATED_DATE datetime(6) not null,
UPDATED_DATE datetime(6) not null,
FOOD_FK bigint null,
MEAL_FK bigint null,
constraint FKdipb7hg6jdu5764nq3wcnviua foreign key (FOOD_FK) references FOOD_TB (FOOD_PK),
constraint FKr2altmd95kev38n36mno92lsi foreign key (MEAL_FK) references MEAL_TB (MEAL_PK)
);
nested exception is java.sql.SQLException:
(conn=1551) Can't create table `gaebaljip`.`MEAL_FOOD_TB` (errno: 150 "Foreign key constraint is incorrectly formed")
해당 오류는 외래 키 제약 조건에 문제가 있는 것을 알려준다.
필자는 위의 에러를 해결하기 위해 아래의 3가지를 확인하였다.
- 참조하는 외래키의 데이터 타입이 일치하지 않는 경우
- 참조하는 테이블 또는 참조 되는 컬럼이 존재하지 않는 경우
- 테이블의 charset, collation이 다른 경우
내 경우에는 3번째 케이스에 속하였다.
charset이란?
charset은 character set의 줄임말로, 데이터베이스가 문자를 어떻게 해석하고 저장할지 결정하는 규칙의 집합이다.
collation이란?
Collation은 데이터베이스에서 문자열을 비교하고 정렬할 때 사용하는 규칙의 집합이다.
이는 문자열의 대소문자 구분, 악센트 구분, 문자의 정렬 순서 등을 결정한다.
문제 해결
모든 테이블의 schema.sql의 charset과 collate설정을 통일하였다.
CREATE TABLE `MEAL_TB` (
`MEAL_PK` bigint(20) NOT NULL AUTO_INCREMENT,
`CREATED_DATE` datetime(6) NOT NULL,
`UPDATED_DATE` datetime(6) NOT NULL,
`MEAL_TYPE` varchar(255) NOT NULL,
`MEAL_FOOD_MULTIPLE` double NOT NULL,
`MEMBER_FK` bigint(20) DEFAULT NULL,
PRIMARY KEY (`MEAL_PK`),
KEY `FK5napxbpjxsev8lnx004fcrqrn` (`MEMBER_FK`),
CONSTRAINT `FK5napxbpjxsev8lnx004fcrqrn` FOREIGN KEY (`MEMBER_FK`) REFERENCES `MEMBER_TB` (`MEMBER_PK`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
해결~
728x90
'Project Trouble Shooting > [EATceed] 몸무게 증량 어플' 카테고리의 다른 글
헥사고날 아키텍처 회고 (1) (0) | 2024.02.12 |
---|---|
리버스 프록시(Reverse Proxy) 설정 (2) | 2024.01.22 |
Spring Security에서 Unauthorized, Forbidden 처리 (0) | 2024.01.15 |
[Spring Security] @AuthenticationPrincipal을 커스텀 해보자(Feat : ArgumentResolver) (0) | 2024.01.11 |
JPA 대소문자 구별 에러 해결 with MariaDB (0) | 2024.01.01 |