Hello

MySQL LONGTEXT와 DW 문자열 길이 제한: 실무 이슈 정리 본문

DB

MySQL LONGTEXT와 DW 문자열 길이 제한: 실무 이슈 정리

nari0_0 2025. 5. 28. 17:39
728x90

1. 문제아닌 문제의 시작..?

빅데이터팀으로부터 MySQL에 LONGTEXT 컬럼이 추가되었는지 확인 요청이 들어왔습니다.
확인 결과, 담당자가 관리자 기록용으로 사용하기 위해 LONGTEXT로 memo 컬럼이 아래와 같이 추가했다고 합니다.

ADD COLUMN `memo` LONGTEXT NULL DEFAULT NULL; 

 

2. LONGTEXT 사용 이유..?

컬럼을 추가하신 분이 길이에 대한 요구사항이 없어 안전하게 가장 큰 값으로 설정해 두셨다고 한다.(통도 크시지 참)

  TEXT MEDIUMTEXT LONGTEXT
최대 크기 ~64KB ~16MB ~4GB
인덱스 제한 인덱스 길이 제한 존재 (최대 길이 지정 필요) 동일 동일
메모리 사용 적음 중간 많음
쿼리 성능 영향 작음 중간
정렬·GROUP BY 제한 제한 있음 (기본 1024바이트까지만 정렬) 동일 동일
스토리지 외부 저장됨 (InnoDB의 경우 LOB 영역) 외부 저장됨 외부 저장됨

 

3. DW 제약사항

빅데이터팀은 DW 적재 시 문자열을 최대 8000자 까지만 저장 가능하기 때문에 이보다 긴 문자열은 적재 대상에서 제외되거나 오류가 발생 할 수 있어 컬럼 타입 수정요청을 해주셨다.

SQL Server 기반
DW에서는 일반적으로 VARCHAR(8000)까지만 문자열을 일반 컬럼으로 저장할 수 있으며, 그 이상은 VARCHAR(MAX)로 지정되어 LOB(대용량 객체)로 처리되기 때문에 성능 저하나 제약이 생길 수 있습니다. 
DW에서는 문자열을 8000자 이하로 제한하는 경우가 많습니다.

 

4. 해결

실제로는 8000자를 넘는 메모가 없을 것이라는 점, 해당 메모 컬럼이 관리용 메모로 간단히 쓰일 용도라는 점을 고려하여

 LONGTEXT를 VARCHAR(255)로 변경하여 DW 호환성과 성능 문제를 해결하기로 결정했습니다.

🧠 요약 및 회고

DW의 문자열 컬럼이 최대 8000이라는 것을 알게 되었다 올. 근데 진짜 메모를 LONGTEXT로 한건 참치꽁치임ㅎㅎ

  내용
설계 시점 메모 길이에 대한 명확한 요구사항 없음 → LONGTEXT 채택
DW 시스템 제약 DW 시스템은 VARCHAR(8000) 또는 그 이하 길이만 지원
기술적 불일치 MySQL 저장 가능 범위와 DW 수용 가능 범위 간 차이 발생
해결 실질적으로 LONGTEXT범위나 8000자를 초과하는 메모가 드물것이기 때문에, 타입을 VARCHAR(255)로 낮춰 차이 해결

 

Mysql Text 관련 참고:

https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-numeric

https://dev.mysql.com/doc/refman/8.0/en/blob.html

728x90