본문 바로가기

프로그래밍&IT/SQL Server (MS-SQL)

[MSSQL] 자료형 (Data type)

 

 

MSSQL / SQL Server 자료형

유형 자료형
정수 bigint -2^63(-9,223,372,036,854,775,808) ~
 2^63-1(9,223,372,036,854,775,807)
 8바이트
int -2^31(-2,147,483,648) ~ 2^31-1(2,147,483,647)
4바이트
smallint -2^15(-32,768) ~ 2^15-1(32,767)
2바이트
tinyint 0 ~ 255
정확한
숫자
Numeric /
Decimal
(동의어)
decimal[ (p[ ,s] )] 및 numeric[ (p[ ,s] )]
고정 전체 자릿수 및 소수 자릿수 값입니다.
최대 전체 자릿수를 사용하는 경우 유효한 값은
- 10^38 +1부터 10^38 - 1까지입니다.
decimal의 ISO 동의어는 dec 및 dec(p, s)입니다.
numeric 함수는 decimal과 동일한 기능

 
전체 자릿수 저장소 크기(바이트)
1 - 9 5
10-19 9
20-28 13
29-38 17
부정확한
숫자
float - 1.79E+308에서 -2.23E-308, 0과 2.23E-308에서 1.79E+308
real - 3.40E+38에서 -1.18E - 38, 0과 1.18E-38에서 3.40E + 38
(4바이트)
날짜 및
시간
date 0001-01-01부터 9999-12-31까지
서기 1년 1월 1일부터 9999년 12월 31일까지
3바이트(고정)
datetime 1753년 1월 1일부터 9999년 12월 31일까지 /
00:00:00부터 23:59:59.997까지 / 8바이트
datetime2 날짜& 시간 범위 :
0001-01-01부터 9999-12-31까지
서기 1년부터 1월 1일부터 9999년 12월 31일까지 /
00:00:00부터 23:59:59.9999999까지 /
저장소 :
전체 자릿수가 3 미만인 경우 6바이트
3 및 4인 경우 7바이트
기타 모든 전체 자릿수의 경우 8바이트가 필요합니다.
문자길이 :
최소 19자리(YYYY-MM-DD hh:mm:ss )부터 최대 27자리(YYYY-MM-DD hh:mm:ss.0000000)까지
datetimeoffset 표준 시간대를 인식하며 24시간제를 기준으로 하는 시간과 결합된 날짜를 정의함.
날짜& 시간 범위 : 0001-01-01부터 9999-12-31까지
서기 1년 1월 1일부터 9999년 12월 31일까지 /
00:00:00부터 23:59:59.9999999까지 /
문자길이:
최소 26자리(YYYY-MM-DD hh:mm:ss {+|-}hh:mm) ~
최대 34자리(YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)까지
저장소 크기: 초 소수 부분 자릿수 기본값 100ns를 기준으로 10바이트(고정)가 기본값입니다
smalldatetime 날짜와 시간을 정의합니다. 시간은 하루 24시간을 기준으로 하며 초는 항상 소수 자릿수 없이 0(:00)으로 표시.
문자길이 : 최대 19자리
저장소 크기: 4바이트(고정)
time 시간은 표준 시간대를 인식하지 않으며 24시간제를 기준으로.
기본문자열 리터럴 형식 : hh:mm:ss[.nnnnnnn]
문자길이 :
최소 8자리(hh:mm:ss)부터 최대 16자리(hh:mm:ss.nnnnnnn).
초 소수 부분 자릿수 기본값 100ns를 기준으로
5바이트(고정)가 기본값.
문자열 char[n] 고정길이 문자열 데이터형식
varchar(
n | max)
가변길이 문자열 데이터 형식
ntext, text
그리고
image관련
ntext, text 및 image 데이터 형식은 Microsoft SQL Server의 이후 버전에서 제거될 예정?
대신에, nvarchar(max), varchar(max) 및 varbinary(max) 사용하라? 어느 버전부터???

ntext : 최대 길이가 2^30 - 1(1,073,741,823)인 가변 길이 유니코드 데이터
text : 서버의 코드 페이지에 있는 최대 문자열 길이가 2^31 - 1(2,147,483,647)인 비유니코드 가변 길이 데이터.
서버 코드 페이지에서 더블바이트 문자를 사용하더라도 저장소 크기는 그대로 2,147,483,647바이트.
문자열에 따라 저장소 크기가 2,147,483,647바이트보다 작을 수도 있다
유니코드
문자열
nchar[n] 고정길이 유니코드 데이터. UNICODE UCS-2 문자집합 사용
n은 문자열 길이를 정의하고
1에서 4,000 사이의 값이어
nvarchar
( n | max )
가변길이 유니코드 데이터. UNICODE UCS-2 문자집합 사용
1에서 4,000 사이의 값이 될 수 있다.
max는 최대 저장소 크기가 2^31-1바이트(2GB)이며,
저장소 크기는 입력된 실제 데이터 길이의 2배+2bytes. (?)
이진
문자열
binary[n] 고정 길이의 binary 데이터 형식.
n은 1부터 8,000까지의 값이 될수있다, 저장소크기는 n바이트
varbinary
[n | max]
가변 길이의 binary 데이터 형식.
n은 1부터 8,000까지의 값이 될 수 있다.
max는 최대 저장소 크기가 2^31-1바이트.
image 위에 나오 내용 참조하며,
image : 0에서 2^31-1(2,147,483,647)바이트의 가변 길이 이진 데이터
기타
데이터 형식
cursor cursor데이터 형식으로 만들어진 모든 변수는 Null을 허용하며,
cursor 데이터 형식을 가진 변수와 매개 변수를 참조할 수 있는 작업은 다음과 같다

  • DECLARE @local_variable@local_variable
  • OPEN, FETCH, CLOSE 및 DEALLOCATE 커서 문
  • 저장 프로시저 출력 매개 변수
  • CURSOR_STATUS 함수
  • sp_cursor_list, sp_describe_cursor, sp_describe_cursor_tablessp_describe_cursor_columns 시스템 저장 프로시저
cursor 데이터 형식은 CREATE TABLE 문에 있는 열에서 사용할 수 없다.
timestamp /
rowversion
timestamp는 rowversion 데이터 형식의 동의어?
자동으로 생성된 고유 이진 숫자를 표시하는 데이터 형식.

timestamp 구문은 더 이상 사용되지않는다?
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고,
hierarchyid hierarchyid 데이터 형식은 가변 길이의 시스템 데이터 형식.
계층에서의 위치를 나타내는 데 사용.

hierarchyid 형식의 열은 자동으로 트리를 나타내지 않으며,
응용 프로그램에 따라 원하는 행 간 관계가 값에 반영되도록 hierarchyid 값이 생성되어 할당됨.

높은 압축성
n개 노드가 포함된 트리에서 노드를 나타내는 데 필요한 평균 비트 수는 평균 fanout(노드의 평균 자식 수)에 따라 달라집니다. 작은 fanout(0-7)의 경우 크기는 약 6*logAn비트입니다. 여기서 A는 평균 fanout입니다. 평균 fanout 수준이 6인 100,000명으로 구성된 조직 계층의 노드는 약 38비트를 사용합니다. 이는 저장을 위해 40비트나 5바이트로 반올림됩니다.

깊이 우선 순서로 비교
두 개의 hierarchyid 값이 a와 b인 경우 a<b는 깊이 우선 트리 탐색에서 a가 b 앞에 온다는 의미입니다. hierarchyid 데이터 형식의 인덱스에는 깊이 우선 순서가 사용되며 깊이 우선 탐색에서 서로 가까이 있는 노드는 서로 가깝게 저장됩니다. 예를 들어 레코드의 자식은 해당 레코드에 인접하게 저장됩니다. 자세한 내용은 hierarchyid 데이터 형식 사용(데이터베이스 엔진)을 참조하십시오.

임의 삽입 및 삭제 지원

GetDescendant 메서드를 사용하면 지정한 노드의 오른쪽, 지정한 노드의 왼쪽 또는 두 형제 사이에 형제를 생성할 수 있습니다. 임의 개수의 노드를 계층에서 삽입하거나 삭제할 때 비교 속성이 유지됩니다. 대부분의 삽입 및 삭제 시 압축성 속성이 유지됩니다. 그러나 두 노드 간 삽입 시에는 약간 덜 압축된 표현으로 hierarchyid 값이 생성됩니다.
hierarchyid 형식에 사용되는 인코딩은 892바이트로 제한됩니다. 따라서 표현에 수준이 너무 많아 892바이트에 들어가지 못하는 노드는 hierarchyid 형식으로 나타낼 수 없습니다.

hierarchyid 형식은 CLR 클라이언트에서는
SqlHierarchyId 데이터 형식으로 제공됩니다


uniqueidentifier
  • NEWID 함수 사용
  • 문자열 상수에서 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 형식으로 변환합니다. 여기서 각 x는 0-9 또는 a-f 범위의 16진수입니다. 예를 들어 6F9619FF-8B86-D011-B42D-00C04FC964FF는 유효한 uniqueidentifier 값입니다.
비교 연산자는 uniqueidentifier 값으로 사용할 수 있습니다. 그러나 순서는 두 값의 비트 패턴을 비교하여 구현되지 않습니다. uniqueidentifier 값에 대해서는 비교(=, <>, <, >, <=, >=) 및 NULL에 대한 확인(IS NULL 및 IS NOT NULL) 연산만 수행할 수 있습니다. 다른 산술 연산자는 사용할 수 없습니다. IDENTITY를 제외한 모든 열 제약 조건과 속성은 uniqueidentifier 데이터 형식에서 사용할 수 있습니다.
구독이 업데이트되는 병합 복제 및 트랜잭션 복제에서는 uniqueidentifier 열을 사용하여 테이블의 여러 복사본에서 행을 고유하게 식별할 수 있습니다
sql_variant SQL Server에서 지원하는 여러 가지 데이터 형식의 값을 저장하는 데이터 형식
sql_variant는 열, 매개 변수, 변수 및 사용자 정의 함수의 반환 값으로 사용될 수 있습니다. sql_variant는 이 데이터베이스 개체들이 다른 데이터 형식의 값을 지원할 수 있게 합니다.
sql_variant 형식의 열은 다른 데이터 형식의 행을 포함할 수 있습니다. 예를 들어 sql_variant로 정의된 열은 int, binary 및 char 값을 저장할 수 있습니다. 다음 표에서는 sql_variant를 사용하여 저장할 수 없는 값 형식을 나열합니다.
 
varchar(max) varbinary(max)
nvarchar(max) xml
text ntext
image rowversion (timestamp)
sql_variant geography
hierarchyid geometry
사용자 정의 형식 datetimeoffset
xml XML 데이터를 저장하는 데이터 형식.
xml 유형의 변수 또는 열에 xml 항목을 저장할 수 있다

xml ( [ CONTENT | DOCUMENT ] xml_schema_collection )
table 나중에 처리하기 위해 결과 집합을 저장할 수 있는 특별한 데이터 형식
table은 주로 테이블 반환 함수의 결과 집합으로 반환되는 행 집합을 임시로 저장하는 데 사용됩니다. 함수 및 변수를 table 형식으로 선언할 수 있으며 table 변수는 함수, 저장 프로시저 및 일괄 처리에서 사용할 수 있습니다.

 

mssql 버전에 따라서 변할 수 는 있겠지만,

기본적인 int, varchar 같은 건 안 변하겠죠?