TEXT 데이터 타입
TEXT
데이터 타입은 주로 길고 큰 문자열 데이터를 저장하는 데 사용
특징
- 문자 데이터 : TEXT는 문자 데이터를 저장하는 데 최적화되어 있음
- 이는 일반적인 문자열, 문서, JSON, XML 등의 데이터를 저장하는 데 유용
- 가변 길이 : TEXT 데이터는 가변 길이의 문자열을 저장할 수 있으며 최대 크기는 DB 시스템에 따라 다름
- 사이즈 : 많은 DB 시스템에서 TEXT 타입은 다양한 크기로 구분됨
- TINYTEXT : 최대 255 바이트
- TEXT : 최대 65,535 바이트 (64KB)
- MEDIUMTEXT: 최대 16,777,215 바이트 (16 MB)
- LONGTEXT: 최대 4,294,967,295 바이트 (4 GB)
- 인덱싱 : TEXT 필드 전체를 인덱싱하기에는 비효율적이므로 일반적으로 텍스트의 앞부분만 인덱싱함
- 저장 방법 : TEXT 데이터는 일반적으로 테이블의 행(row)에 직접 저장되지 않고, 외부에 저장된 후 그 위치가 테이블의 해엥 저장됨
VARCHAR와 TEXT의 차이
VARCHAR
- 저장 위치
- 행 내부(메모리)에 데이터를 직접 저장
- 예를 들어, VARCHAR(100)을 선언하면 해당 칼럼을 위한 최대 100 문자(utf8 기준 최대 400 바이트)의 공간이 필요
- 최대 크기
- 최대
65535
문자 길이까지 선언할 수 있음 (실제로는 65533으로 선언 가능, 2바이트는 길이 정보를 저장하는 데 사용)
- 인덱스
- 인덱스를 걸 수 있음, VARCHAR 컬럼에 대한 인덱스는 일반적으로 전체 문자열을 인덱싱함
TEXT
- 저장위치
- 행 외부(디스크)에 데이터를 저장하며 행 내부에는 데이터의 위치를 가리키는 포인터가 저장
- 예를 들어, TEXT 필드를 선언하면 해당 포인터를 위한 공간이 필요함(일반적으로 8바이트)
- 최대 크기
- 65535 바이트 (약 64KB)까지 데이터를 저장할 수 있음, 이 크기 한도는
UTF-8
인코딩 기준으로 최대 약 21845자까지 지정할 수 있음
- 인덱스
- 인덱스를 걸 때 크기 제한을 해야함, 인덱스에 대한 크기 제한을 설정하지 않으면 다음과 같은 에러가 발생할 수 있음
Specified key was too long; max key length is 767 bytes
CREATE TABLE board(
id INT NOT NULL AUTO_INCREMENT, title VARCHAR(255),
content TEXT,
PRIMARY KEY (id)
);
CREATE INDEX idx_content ON board (content(20));
BLOB 데이터 타입
- BLOB(Binary Large Object) 데이터 타입은 바이너리 데이터를 저장하는 데 사용
특징
- 바이너리 데이터 : BLOB은 이미지, 비디오, 오디오, 압축 파일 등 바이너리 데이터를 저장하는 데 최적화되어 있음
- 가변 길이 : BLOB 데이터도 가변 길이의 바이너리 데이터를 저장할 수 있으며 최대 크기는 데이터베이스 시스템에 따라 다름
- 사이즈 : 많은 DB 시스템에서 BLOB 타입은 다양한 크기로 구분
- TINYBLOB: 최대 255 바이트
- BLOB: 최대 65,535 바이트 (64 KB)
- MEDIUMBLOB: 최대 16,777,215 바이트 (16 MB)
- LONGBLOB: 최대 4,294,967,295 바이트 (4 GB)
- 인덱싱 : BLOB 데이터는 인덱싱이 어렵기 때문에 일반적으로 인덱싱되지 않음
- 일부 DB 시스템에서는 BLOB 데이터의 일부만 인덱싱할 수 있음
- 저장 방법 : BLOB 데이터는 TEXT와 유사하게 테이블의 행에 직접 저장되지 않고 외부에 저장된 후 그 위치가 테이블의 행에 저장됨
예시
INSERT INTO `leesfact`
(`img`)
VALUES
(LOAD_FILE('C:/Users/leesfact/Desktop/dev/a.png'))
그렇다면, 왜 BLOB를 많이 사용하지 않을까?
- DB에서 BLOB(Binary Large Object)를 사용하여 큰 이진 파일(예: 이미지, 비디오, 오디오)을 저장하는 것은 몇 가지 이유로 일반적으로 추천하지 않음
1. 성능 문제
- 성능 저하
- DB에 큰 이진 파일을 저장하면 DB의 성능이 저하될 수 있음
- 이는 읽기 및 쓰기 작업이 더 오래 걸리고 전체 시스템의 성능에 영향을 미칠 수 있음
- 처리 시간 증가
- 큰 파일을 DB에 처리하고 관리하는 데 시간이 많이 걸림
- 이는 DB의 응답 시간을 늘리고 사용자 경험에 부정적인 영향을 미칠 수 있음
- 백업 및 복구 시간 증가
- DB에 큰 파일이 많이 저장되어 있는 경우, DB 백업 및 복구 시간이 상당히 증가함
- 이는 시스템 가용성에 영향을 미치고 긴 다운타임을 초래할 수 있음
2. 보안문제
- 접근 제어 복잡성
- DB에 이미지를 저장하면 이 이미지에 대한 접근을 제어하고 관리하는 것이 더 복잡해짐
- 이는 세밀한 접근 제어 정책을 적용하고 유지하는 데 어려움을 초래할 수 있음
- 보안 정책 적용의 어려움
- 큰 이진 파일의 경우 파일 자체의 보안 정책을 적용하기가 어려움, 이는 DB 레벨에서의 보안 설정과 파일 시스템 레벨에서의 보안 설정이 일치하지 않을 수 있음
3. 파일 시스템과의 비교
- 파일 시스템 사용의 효율성
- 일반적으로 큰 이진 파일은 데이터베이스가 아닌 파일 시스템에 저장하고 파일 경로를 DB에 저장하는 방식이 더 효율적임
- 이는 파일 접근 속도를 높이고 DB의 부담을 줄임
- 파일 시스템의 확장성
- 파일 시스템은 대용량 파일 저장 및 관리를 위한 최적화가 되어 있으며 대규모 파일 처리에 더 적합함
- 파일 시스템을 사용하면 DB의 성능 저하를 방지할 수 있음