반응형
MySQL에서 문자열의 길이를 구할 때 LENGTH()와 CHAR_LENGTH() 중 어떤 걸 써야 할지 헷갈린 적이 있다면, 이 글 하나로 정리하자. 바이트 단위와 문자 단위의 차이부터 인코딩에 따른 오동작까지, 실무에서 꼭 짚고 가야 할 포인트를 정리한다.

🧩 LENGTH() 함수란?
LENGTH(str)
해당 문자열의 바이트 수(byte length)를 반환한다.
- 영어 한 글자 → 1바이트
- UTF-8 기준 한글 한 글자 → 3바이트
SELECT LENGTH('ABC'); -- 결과: 3
SELECT LENGTH('가나다'); -- 결과: 9 (UTF-8에서 각 글자 3바이트)
📌 즉, LENGTH는 디스크 저장 공간, 전송 패킷 크기, 바이트 단위 제한 등을 계산할 때 유용하다.
반응형
🔡 CHAR_LENGTH() 함수란?
CHAR_LENGTH(str)
해당 문자열의 문자 수(character length)를 반환한다.
SELECT CHAR_LENGTH('ABC'); -- 결과: 3
SELECT CHAR_LENGTH('가나다'); -- 결과: 3
📌 CHAR_LENGTH는 사람이 인식하는 글자 수 기준이다.
유니코드 문자든 이모지든, 글자 수가 중요한 UI/UX, 사용자 입력 제한 등에 자주 쓰인다.
⚖️ LENGTH vs CHAR_LENGTH 핵심 차이
| 구분 | LENGTH() | CHAR_LENGTH() |
| 기준 단위 | 바이트(byte) | 문자(character) |
| 인코딩 영향 받음 | O | X |
| 실무 사용 예 | 저장공간 계산, 네트워크 용량 | 사용자 입력 제한, UI 표시 기준 |
✅ 참고: CHARACTER_LENGTH()는 CHAR_LENGTH()의 완전한 이름이며 둘은 동일하게 작동한다.
⚠️ 실무에서 흔히 생기는 오류
1. 한글 입력 제한에서 LENGTH 사용
-- 한글 10자까지 입력 허용하고 싶을 때
WHERE LENGTH(name) <= 10 -- ❌ 실제론 30바이트까지 허용됨
WHERE CHAR_LENGTH(name) <= 10 -- ✅ 정확하게 10글자 제한
2. VARCHAR 길이 체크 실수
CREATE TABLE test (
col VARCHAR(30)
);
-- 한글 15자 입력시 CHAR_LENGTH = 15, LENGTH = 45
-- 초과 저장될 수 있음. 정확한 길이 제어는 CHAR_LENGTH 기준으로 해야 안전.
반응형
🛠️ 실전 활용 팁
- 사용자 입력 길이 제한: CHAR_LENGTH()
- 데이터 전송 용량 체크: LENGTH()
- 로그 기록 시 전체 사이즈 파악: LENGTH()
- 문자 수 기반 정책(닉네임, 제목 등): CHAR_LENGTH()
🧪 실습 예제
-- 문자열 길이 비교
SELECT
'테스트' AS str,
LENGTH('테스트') AS byte_len,
CHAR_LENGTH('테스트') AS char_len;
-- 한글, 이모지 포함 문자열 비교
SELECT
'😀가나ABC' AS str,
LENGTH('😀가나ABC') AS byte_len,
CHAR_LENGTH('😀가나ABC') AS char_len;
🔍 마무리 요약
- LENGTH()는 바이트 단위, CHAR_LENGTH()는 문자 단위
- 인코딩이 UTF-8이라면 한글은 3바이트, 이모지는 4바이트 이상이 될 수 있음
- 입력 제한, 표시 기준은 CHAR_LENGTH()로 하는 게 안정적임
🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] 문자열 치환 함수: REPLACE 실무 활용법 (1) | 2025.07.19 |
|---|---|
| [MySQL] 문자열 검색 함수: INSTR, LOCATE, POSITION 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 추출 함수: LEFT, RIGHT, SUBSTRING 정리 (0) | 2025.07.19 |
| [MySQL] 문자열 연결 함수: CONCAT, CONCAT_WS 활용법 (0) | 2025.07.19 |
| [MySQL] (연결최적화6️⃣) 실무 연결 설정 체크리스트 총정리 (1) | 2025.07.19 |
| [MySQL] (연결최적화5️⃣) 커넥션 누수 원인 진단과 해결 전략 (1) | 2025.07.18 |
| [MySQL] (연결최적화4️⃣) 트랜잭션 전파 방식과 커넥션 이슈 분석 (0) | 2025.07.18 |
| [MySQL] (연결최적화3️⃣) 커넥션 타임아웃 설정과 오류 해결법 (0) | 2025.07.18 |