홈 › SQL 중급 › 07 / 11

문자·날짜 함수 DB별 비교

섹션 6진행 0 / 11

5. 자주 하는 실수 (Tip)

실수 1: LENGTH 를 문자 수 함수로 착각하고 MySQL 코드를 옮긴다

Oracle·H2 의 LENGTH 는 문자 수를 주지만, 실제 MySQL 의 LENGTH 는 바이트 수를 줍니다. 한글이 섞인 컬럼에 이 착각으로 LENGTH 를 쓰면 글자 수 제한 검사가 실제보다 3배 엄격하게 걸립니다. 문자 수가 필요하면 DB 를 가리지 않고 CHAR_LENGTH 를 씁니다.

실수 2: 날짜 범위 조건에 BETWEEN 과 날짜만 넣는다

hired BETWEEN '2024-02-01' AND '2024-02-15' 처럼 시간 성분이 있을 수 있는 컬럼에 날짜만 넣으면, 종료일 당일의 데이터가 빠질 수 있습니다. 2.4절에서 봤듯이 >= 시작 AND < 다음날 패턴이 안전합니다.

실수 3: 개월 더하기 결과를 항상 같은 일자로 착각한다

"1월 15일에 1개월을 더하면 2월 15일"이라는 규칙만 기억하고, 말일 근처 날짜에 개월을 더할 때도 같은 규칙을 적용하는 실수가 흔합니다. 4절 변형1 에서 확인했듯 1월 31일에 1개월을 더하면 2월 31일이 아니라 2월 말일로 자동 조정됩니다.

실수 4: H2 에서 성공했다고 실제 DB 에서도 그대로 된다고 믿는다

4절에서 여러 번 봤듯이 H2 의 MySQL·MSSQL 모드는 LPAD·LAST_DAY·CONCAT 의 NULL 처리처럼 실제 DB 보다 관대하게 동작하는 함수가 있습니다. H2 로 문법을 확인했더라도, 실제 DB 함수 목록(2.1·2.2절 표)과 다시 맞춰 봐야 합니다.