반응형
이번 글에서는 SQL Server의 문자열 데이터 형식인 CHAR, VARCHAR, NCHAR, NVARCHAR가 실제로 얼마나 저장 공간을 차지하는지를 확인해 보았습니다.
이를 통해 데이터 형식 선택이 저장 효율에 미치는 영향을 이해할 수 있습니다.
📌 예제 코드
-- [1] 문자열 형식별 테이블 생성
CREATE TABLE char_table (
col_1 CHAR(50), -- 고정 길이, 영문
col_2 VARCHAR(50), -- 가변 길이, 영문
col_3 NCHAR(50), -- 고정 길이, 유니코드
col_4 NVARCHAR(50) -- 가변 길이, 유니코드
);
-- [2] 각 컬럼에 한 글자만 저장
INSERT INTO char_table
VALUES ('A', 'A', N'A', N'A');
-- [3] 각 컬럼의 논리적 길이와 실제 저장 크기 비교
SELECT
col_1, LEN(col_1) AS char_length, DATALENGTH(col_1) AS data_length,
col_2, LEN(col_2) AS char_length, DATALENGTH(col_2) AS data_length,
col_3, LEN(col_3) AS char_length, DATALENGTH(col_3) AS data_length,
col_4, LEN(col_4) AS char_length, DATALENGTH(col_4) AS data_length
FROM char_table;
-- [4] 실습 테이블 제거
DROP TABLE char_table;
💻 실행 결과 예시
col_1 | char_length | data_length | col_2 | char_length | data_length | col_3 | char_length | data_length | col_4 | char_length | data_length |
A | 1 | 50 | A | 1 | 1 | A | 1 | 100 | A | 1 | 2 |
- LEN()은 문자 수를 반환합니다.
- DATALENGTH()는 실제로 차지한 바이트 수를 반환합니다.
📌 관찰 결과:
- CHAR(50): 고정 50바이트 (내용과 무관)
- VARCHAR(50): 1바이트 (영문 1글자만 저장)
- NCHAR(50): 고정 100바이트 (유니코드 한 글자 = 2바이트 × 50)
- NVARCHAR(50): 2바이트 (유니코드 1글자만 저장)
💬 코드 설명
- CHAR(n): 고정 길이 문자열, 공간 낭비 가능
- VARCHAR(n): 가변 길이 문자열, 효율적 저장
- NCHAR(n): 고정 유니코드 문자열, 2바이트 × n
- NVARCHAR(n): 가변 유니코드 문자열, 2바이트 × 실제 글자 수
- LEN(): 글자 수 반환 (공백 제외)
- DATALENGTH(): 저장된 실제 바이트 크기 반환
💡 포인트 정리
- 고정 길이(CHAR, NCHAR)는 항상 지정된 공간만큼 차지
- 가변 길이(VARCHAR, NVARCHAR)는 저장된 데이터만큼만 공간 사용
- 한글, 특수문자는 NCHAR, NVARCHAR 사용 필요 (2바이트 유니코드)
- DATALENGTH()는 저장 효율을 확인할 때 유용
📌 정리하자면, 이번 강의에서는 문자열 데이터 형식별로 저장 공간의 차이를 LEN()과 DATALENGTH()를 통해 직접 확인해 보았습니다.
형식에 따라 데이터 저장 크기가 크게 달라질 수 있으므로, 상황에 맞는 형식 선택이 데이터베이스 성능과 효율에 큰 영향을 줄 수 있습니다.
'SQL Server > 실기 정리' 카테고리의 다른 글
SQL Server 27강 - 두 테이블 연결 조회 (INNER JOIN) (2) | 2025.06.02 |
---|---|
SQL Server 26강 - 날짜/시간 데이터 형식별 저장 결과 비교 (DATE, TIME, DATETIME, DATETIME2) (0) | 2025.06.02 |
SQL Server 25강 - 유니코드 없이 한글을 저장할 때 생기는 문제 (VARCHAR vs NVARCHAR) (0) | 2025.06.02 |
SQL Server 23강 - SELECT INTO를 활용한 테이블 생성 및 데이터 복사 (0) | 2025.06.02 |
SQL Server 22강 - 다른 테이블에서 조건부 데이터 복사하기 (0) | 2025.06.02 |
SQL Server 21강 - 외래 키(Foreign Key) 설정과 참조 무결성 (0) | 2025.06.02 |