SQL Server/실기 정리

SQL Server 24강 - 문자열 데이터 형식과 저장 공간 비교 (LEN, DATALENGTH)

코딩하는냥이 2025. 6. 2. 14:27
반응형

이번 글에서는 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()를 통해 직접 확인해 보았습니다.
형식에 따라 데이터 저장 크기가 크게 달라질 수 있으므로, 상황에 맞는 형식 선택이 데이터베이스 성능과 효율에 큰 영향을 줄 수 있습니다.