SQL 사용자 Tip & 강좌
안녕하세요. 하만철입니다.
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

SQL을 함께 열심히 해 보아요~!

하만철
차주언

bit칼럼 10개를 넣어도 바로 다 변경되지는 않는군요. 페이지 헤더정보만 변경되고 실제 해당 row의 칼럼정보 09 => 0a 로 바뀌는건 데이터가 업데이트 되었을때 바뀌네요.