😱 에러
사용자의 답변을 받아 컨설팅을 반환하고 feedback 필드에 집어넣는 과정에서 발생한 오류이다.
Error: 1406-22001: Data too long for column 'feedback' at row 1
SQL Error: 1406, SQLState: 22001
(conn=270) Data too long for column 'feedback' at row 1
📌 Error 해석
✏️ Error: 1406-22001: Data too long for column '?' at row 1
: 우선 에러를 파악해보자
Error: 1406-22001: Data too long for column 'feedback' at row 1
SQL Error: 1406, SQLState: 22001
(conn=270) Data too long for column 'feedback' at row 1
해석해보자면, feedback 컬럼에 데이터가 너무 길어서 저장을 못 한다는 것이다. String으로 선언된 컬럼은 JPA에서 VARCHAR (255)로 변환시켜 주는 것이였고, feedback 컬럼에는 255바이트, 즉 한국어 255자 정도까지만 입력될 수 있던 것이였다.
💡길이가 긴 문자열을 DB에 저장하고 싶을 땐 어떤 걸 이용해야할까?
TINYTEXT = 255 바이트
TEXT = 64 킬로바이트
MEDIUMTEXT = 16 메가바이트
LONGTEXT = 4 기가바이트
:TINYTEXT는 VARCHAR와 똑같으므로 제외하고 TEXT를 이용해주는 것이 좋겠다고 판단했다. (MEDIUMTEXT, LONGTEXT는 용량이 커서 무리가 갈 것 같았다.)
📌 첫 번째 시도
✏️ @Lob
: feedback 필드에 @Lob 애노테이션을 추가해주자.
@Lob란
Large Object의 줄임말로서, 대향 객체 데이터를 저장하기 위한 가변 길이 데이터 유형이다. 엔티티 객체 필드 위에 @Lob이라는 어노테이션을 달면 스프링이 추론하여 어떤 타입으로 저장할지 자동으로 판단한다. 따라서 데이터베이스에 정의한 컬럼 타입과 엔티티에 설정하는 타입을 반드시 일치시켜야한다.
⭐️ 결과는 "실패"였다..똑같은 오류가 계속 발생하였다.
📌 두 번째 시도
@Lob으로도 에러가 발생하고, 테이블을 DROP했다가 다시 서버를 시작해도 똑같은 에러가 계속 발생하여 터미널을 통해
Consulting 테이블의 feedback 데이터 타입을 확인해보았다.
확인해보니 왠지 모르게 터미널에서 확인한 feedback Type이랑 Sequel Pro에서 확인한 feedback Type이랑 다르다는 것을 확인할 수 있었다......
터미널을 통해서 데이터타입을 바꿔주었다.
ALTER TABLE your_table MODIFY COLUMN feedback TEXT;
둘다 Text 데이터 타입인 것을 확인할 수 있었다!
⭐️ 결과는 !!!!!!!!!!!!!
1000자가 훌쩍 넘는 데이터도 DB에 잘 저장되는 것을 볼 수 있었다.
긴 문자열을 저장할 때는 항상 데이터 타입이 VARCHAR Type이거나 TINYTEXT Type인지 확인하자 !
'Spring' 카테고리의 다른 글
[ Spring ] Redis의 분산 락을 적용하고 Pub/Sub로 동시성 문제를 해결하자. (0) | 2025.09.30 |
---|---|
[ Spring ] 동시성을 잠금으로 안전하게 처리해보자 (0) | 2025.09.19 |
[Spring Security] Security 기본 (0) | 2024.08.29 |
[Spring] 컨트롤러 예외처리(Exception Handling) (0) | 2024.07.21 |
[Mockito] Mockito란 무엇일까? (0) | 2024.07.04 |