SQL Server의 bit 데이터 저장 방식
@@version
Microsoft SQL Server 2008 (SP1) - 10.0.2775.0 (X64)
Apr 30 2010 14:31:04
Copyright (c) 1988-2008 Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
--DROP TABLE T1
--TRUNCATE TABLE T1
-- 테이블 생성
create table t1 (
col1 int
, b1 bit
, col2 varchar(1000)
, b2 bit)
-- 데이터 입력
insert into t1 select 255, 1, 'abcde', 1
go 100
-- dbid와 objectid 확인
select db_id('dba'), object_id('t1')
-- 페이지 번호(PID) 확인
dbcc ind (5, 421576540, 0)
-- 페이지 내용 확인
dbcc traceon(3604)
dbcc page(5, 1, 174, 2)
-- 페이지 내용 중 일부
090CC0B0: 62636465 30000900 ff000000 eb0400f0 †bcde 0... .... ....
090CC0C0: 01001500 61626364 65300009 00ff0000 †.... abcd e0.. ....
30 0 -- statusA
00 0 -- statusB
0900 9 --고정길이 컬럼의 길이+4 (2개 bit 컬럼이 합쳐져서 1byte를 사용함)
ff000000 255 -- 고정길이컬럼데이터int 255
eb 하위 2bit가 11 -- bit 컬럼의 데이터 (2개 bit 컬럼이 합쳐져서 1byte를 사용함)
0400 4 -- 컬럼수
f0 하위 4bit가 0000-- null 허용컬럼 bitmap
0100 1 -- 가변길이컬럼수
1500 21 -- 가변길이컬럼오프셋배열
61 a -- 가변길이컬럼데이터1
62636465 bcde -- 가변길이컬럼데이터2
이 상태에서 bit컬럼을 추가할 경우를 포함하여 8개 bit 컬럼이 넘어서 합계 1byte를 넘기 전에는 1byte를 사용하게 됨.
하만철 / Ha Man-cheol