
JPA 덕분에 DB에서 삽질한 이야기
두줄요약
UUID를 `BINARY(255)`에 저장하면서 MySQL 우측 패딩으로 조회가 실패한 원인을 분석했습니다. UUID 컬럼을 `BINARY(16)`으로 변경하고 SQL로 패딩 영향을 검증했습니다.
문제 상황
- UUID를 ID로 저장한 뒤 동일 UUID 기반 조회 실패
- H2 인메모리 DB 테스트와 개발 DB 테스트 간 상이한 결과
원인 분석
- UUID의 실제 크기인 16바이트와
BINARY(255)컬럼 길이의 불일치 - MySQL
BINARY고정 길이 저장 시 남는 영역의 우측 패딩 - 패딩 없는 16바이트 UUID 조건과 255바이트 저장값 간 비교 실패
해결 방법
- UUID ID 컬럼 정의를
BINARY(16)으로 변경 RPAD를 포함한 조회 조건으로 패딩 영향 직접 검증
주의할 점
- H2와 MySQL처럼 DBMS별 binary 타입 처리 차이 확인
- UUID binary 저장 시 컬럼 길이와 하이버네이트 기본 매핑 점검
