본문으로 건너뛰기

데이터 형식(1)

숫자형 데이터 형식​

데이터 형식바이트숫자 범위설명
* BIT10 또는 1Boolean 형인 참(True), 거짓 (False)에 사용
* INT4약 -21억 ~ 21억정수
* SMALLINT2-32,768 ~ 32,767작은 정수
* TINYINT10 ~ 255매우 작은 정수
* BIGINT8-2^63 ~ +2^63-1큰 정수
* DECIMAL(p,[s])5 ~ 17 (가변적)-10^38 +1 ~ 10^38 -1고정 소수점 숫자
NUMERIC5 ~ 17 (가변적)N/A고정 소수점 숫자
REAL4-부동 소수점 숫자
FLOAT[(n)]4 ~ 8 (가변적)-부동 소수점 숫자
MONEY8-2^63 ~ +2^63-1통화
SMALLMONEY4약 -21억 ~ 21억작은 통화
정보
  • 데이터 형식에서 꼭 필요한 만큼만 사용해서 설계해야 한다
  • 일반적으로 MONEY, SMALLMONEY는 잘 사용하지 않고 INT, BIGINT를 사용한다



문자형 데이터 형식​

데이터 형식바이트 수설명
* CHAR[(n)]0 ~ 8,000고정 길이
* NCHAR[(n)]0 ~ 8,000고정 길이 / 유니코드 문자 데이터
* VARCHAR[(n)]최대 2GB가변 길이
* NVARCHAR[(n)]최대 2GB가변 길이 / 유니코드 문자 데이터
TEXT최대 2GB가변 길이
(SQL Server 2016부터는 사용되지 않고, VARCHAR(MAX) 사용을 권장)
NTEXT최대 2GB가변 길이
유니코드 문자 데이터 (SQL Server 2016부터는 사용되지 않고,
NVARCHAR(MAX) 사용을 권장)
BINARY0 ~ 8,000고정 길이 / 2진 데이터 값
VARBINARY[(n)]최대 2GB가변 길이 / 2진 데이터 값
SQL Server 2000은 0 ~ 8,000
IMAGE[(n)]최대 2GBSQL Server 2000에서는 8,000자가 넘는 2진 데이터의 경우에 사용하였으나,
SQL Server 2005이후는 VARBINARY(MAX)사용을 권장
정보
  • VARCHAR 보다는 CHAR 의 데이터 접근이 빠르다

    • 속도가 중요한 경우 CHAR
    • 공간이 중요한 경우 VARCHAR
  • CHAR, VARCHAR 영문은 데이터 크기에 맞는 글자수가 입력되지만 한글은 제한된다
    (영문 1글자 = 1byte, 한글 1글자 = 2byte의 유니코드 이기 때문에)

    • 따라서, 한글 및 다른언어는 유니코드 문자데이터인 NCHAR, NVARCHAR 가 사용된다



날짜와 시간 데이터 형식​

데이터 형식바이트 수설명
* DATETIME81753-1-1 ~ 9999-12-31까지 저장
정확도는 1/1000초 단위 까지
"YYYY-MM-DD 시:분:초" 형식으로 사용
DATETIME26 ~ 80001-1-1 ~ 9999-12-31까지 저장
정확도는 100나노초 단위 까지
"YYYY-MM-DD 시:분:초" 형식으로 사용 ( DATETIME의 확장 형으로 생각하면 됨)
* DATE30001-1-1 ~ 9999-12-31까지 저장
날짜형식만 사용
"YYYY-MM-DD" 형식으로 사용
* TIME500:00:00.0000000 ~ 23:59:59.9999999 까지 저장
정확도는 100나노초 단위까지
"시:분:초" 형식으로 사용
DATETIMEOFFSET10표준 시간대를 인식하며 24시간제를 기준으로 하는 시간과 결합된 날짜를 정의
0001/1/1 ~ 9999/12/31까지 저장
정확도는 100나노초 단위 까지
"YYYY-MM-DD 시:분:초" 형식으로 사용
SMALLDATETIME4~ 2079/1/6까지 저장
정확도는 분 단위까지
DATETIME2, DATE, TIME, DATETIMEOFFSET 형식은 SQL Server 2008부터 지원



기타 데이터 형식​

데이터 형식바이트 수설명
ROWVERSION8VARBINARY(8)과 동일하며 데이터베이스 내에서 자동적으로 생성된 고유 이진 숫자 표시
SQL Server 내부적으로 사용
SYSNAME128NVARCHAR(128)과 동일하며 데이터베이스 개체의 이름에 사용
SQL Server 내부적으로 사용
* CURSOR1T-SQL 커서를 변수로 처리
* TABLEN/A테이블 자체를 저장
임시테이블과 비슷한 기능
UNIQUEIDENTIFIER16복제(replication)에서 사용되는 자료형으로,
유일성을 보장하기 위한 GUID 값을 지정
SQL_VARIANTN/A다른 데이터 형식의 저장이 가능한 데이터형(예외도 있음)
HIERARCHYIDN/A계층 구조가 있는 테이블을 만들거나 다른 위치에 있는 데이터의 계층 구조를 참조
* XMLN/AXML 데이터를 저장하기 위한 형식
* GEOMETRY
* GEOGRAPHY
N/A공간 데이터 형식으로 선, 점 및 다각형 같은 공간 데이터개체를 저장하고 조작
XML은 SQL Server 2005부터,
HIERARCHYID, GEOMETRY/ GEOGRAPHY 형식은 SQL Server 2008부터 지원



사용자 정의 데이터 형식​

기존 데이터 형식에 별칭을 붙이는 것으로, 사용의 편의성을 위해 사용함

CREATE TYPE 사용자데이터형식_이름 FROM 기존데이터형식 NULL 또는 NOT NULL

-- 예시
CREATE TYPE myTypeName FROM nchar(10) NULL



VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX)​

LOB(Large Object: 대량의 데이터)를 저장하기 위해서 지원하는 형식​

예제




FILESTREAM과 FILETABLE / 유니코드 데이터​

FILESTREAM과 FILETABLE​

  • BLOB 데이터를 저장하려면 VARBINARY(MAX) 형식을 사용하면 되는데,
    VARBINARY(MAX)는 최대 크기가 2GB까지의 파일만 저장할 수 있음
  • 2GB 크기 이상의 파일을 저장하려면 FILESTREAM을 사용해야 함
  • FILESTREAM은 SQL Server 2008부터 제공
  • FILESTREAM 기반 >> SQL Server 2012부터 FILETABLE이라는 테이블도 제공됨

유니 코드 데이터​

  • 문자 데이터를 저장하고 관리할 경우, 각 국가별 코드 페이지가 달라 서로 호환되지 않는 문제점을 해결함
  • 데이터 형식은 nchar, nvarchar, ntext 가 있음
  • 입력 시에는 N'문자열' 형식으로 사용하는 것을 권장