
JPA 덕분에 DB에서 삽질한 이야기
두줄요약
UUID를 BINARY(255)에 저장해 조회가 실패한 원인을 MySQL 우측 패딩에서 찾았습니다. UUID 크기에 맞춰 BINARY(16)으로 변경하고 H2·MySQL 차이도 확인했습니다.
문제 상황
- UUID를 ID로 저장한 뒤 동일 UUID 기반
findById조회 실패 - H2 인메모리 DB 테스트와 개발 MySQL DB 테스트 간 상이한 결과
원인 분석
- Hibernate의 UUID 바이너리 저장 방식과 UUID의 16바이트 크기
- MySQL
BINARY(255)컬럼의 우측 패딩으로 저장값과 16바이트 조회 조건 간 불일치
해결 방법
- UUID ID 컬럼 정의를
BINARY(16)으로 명시 @Column(columnDefinition = "BINARY(16)")적용 후 UUID 조회 정상화
주의할 점
- H2와 MySQL의 BINARY 타입 처리 차이를 포함한 테스트 환경 검증
- UUID 바이너리 저장 시 컬럼 길이와 패딩 규칙 확인
