DB

[MySQL] 문자열 길이 함수: LENGTH vs CHAR_LENGTH 정리

인생아 2025. 7. 19. 01:48
반응형

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

반응형