Do It SQL입문 03-7 SQL Server에서 다루는 자료형 정리하기

stan·2023년 6월 23일
0

T - SQL (SQL Server)

목록 보기
11/12
  • 삽입하려는 데이터의 자료형이 여렝 지정한 자료형과 맞지 않으면 오류가 발생

숫자형

자료형데이터 크기 (byte)설명
bit1불리언 형식으로 참 (TRUE, 1) 또는 거짓 (FALSE,0)으로 사용
tinyint1정수 데이터를 사용하는 정확한 숫자 자료형으로 숫자를 저장할 때 가장 많이 사용
smallint2
int4
bigint8
decimal(p,s)5~17전체 자릿수와 소수 자릿수가 고정된 숫자로, 최대 38자리 사용
numberic(p,s)5~17
float(n)4~8
real4부동 소수점 숫자 데이터에 사용하는 근사 숫자 자료형
smallmoney4통화 단위에 주로 사용하며 1/10000까지 정확하게 표현 가능
money8
  • 숫자형 데이터 사용할 때 형변환 type casting에 주의
    - 암시적 형 변환 : 직접 자료형을 변경하지 않아도 실행 환경에서 자동으로 자료형을 변경
    암시적 형 변환은 연산 대상의 자료형이 다를 경우 데이터 우선순위에 따라 시스템이 상위 자료형으로 변경하므로 오류나 성능에 문제가 발생하기 쉬운 만큼 주의해야함
  • 명시적 형 변환 : 사용자가 직접 자료형을 변경
    명시적 형 변환은 CATST, CONVERT등의 함수를 사용해 자료형을 변경
  • 숫자형 데이터는 합, 평균, 나누기 등 다양한 집계 함수에서 자주 사용

문자형

  • 고정길이 : 실젯값을 입혁하지 않아도 지정한 만큼의 저장 공간을 사용

  • 가변길이 : 실제 입력한 값의 크기만큼만 저장 공간을 사용

  • 유니코드 : 한글이나 특수 문자 등을 저장할 때 사용하며 한 글자당 2byte
    - 자료형에서 데이터 크기의 50% 정도만 저장 가능

자료형데이터 크기 (byte)설명
char(n)0~8000고정 깉이 문자열
nchar(n)0~8000유니코드 고정 길이 문자열로 4000자 입력 가능
varchar ( m┃max)0~2^31-1 (2GB)가변 길이 문자열로 n 만큼의 크기 지정가능; max를 지정하면 2GB까지 가능
nvarchar(n┃max0~2^31-1고정 길이의 이진 데이터값
binary(n)0~8000고정 길이의 이진 데이터값
varbinary(n┃max)0~2^31-1가변 길이 이진 데이터값; N을 사용하면 1~8000까지 크기를 지정할 수 있고, max를 지정하면 2GB까지 크기 지정 가능; 동영상 이미지등 저장에 사용

데이터의 실제 저장 공간 크기를 확인 : 고정 길이 문자열과 가변 길이 문자열, 그리고 유니코드 고정 길이 문자열과 유니코드 가변 길이 문자열 속성을 가진 테이블에 A라는 문자를 삽입한 뒤 실제로 사용하는 저장 공간의 크기를 확인하는 쿼리이다.

CREATE TABLE char_table (
col_1 char(50),
col_2 varchar(5),
col_3 nchar(50),
col_4 nvarchar(50
)
GO

INSERT INTO char_table VALUES ('A', 'A', N'A', N'A')
GO

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

유니코드를 사용하지 않았을 때 글자가 개지는 것을 확인하는 쿼리

use DoItSQL
GO

CREATE TABLE unicode_table(
col_1 varchar(50),
col_2 nvarchar(50)
)
GO

INSERT INTO unicode_table VALUES ('가',N'가')
GO
SELECT * FROM unicode_table


유니코드 :

  • 문자 형식의 데이터를 저장하고 관리할 때 국가별 코드 페이지가 달라서 서로 호환되지 않는 문제가 있다

  • 하나의 데이터베이스에 영어,한국어,중국어 등 여러 나라의 연어를 함깨 저장해 사용할 때는 코드에 따른 문자가 서로 달라 문제가 발생한다.
    - 이러한 문제점을 해결하고자 유니코드 형식을 사용하는데 전 세계에서 사용되는 대부분의 문자에서 단일 인코딩 하는 방법을 정의한다

유니코드 특징 :

  • 유니코드 문자열을 저장하려면 한 글자당 2바이트의 공간이 필요하다
    그래서 CHAR(4)는 4바이트이지만 NCHAR(4)는 8바이트의 공간이 필요하다.
  • 유니코드로 저장하려면 자료형도 유니코드 형태여야 하지만, 데이터를 입력할 때 유니코드라는 것을 알려주고자 문자열 앞에 반드시 대문자 N을 사용한다.
  • 유니코드는 문자에만 해당되므로 숫자나 날짜등에는 해당되지 않는다

유니코드 형식의 열과 그렇지 않은 열에 데이터 삽입

-- 테이블 생성
CREATE TABLE doit_unicode (
col_1 varchar(50),
col_2 nvarchar(50)
)

-- 데이터 입력
INSERT doit_unicode VALUES ('ABC', 'ABC')
INSERT doit_unicode VALUES ('가나다','가나다')
INSERT doit_unicode VALUES ('가나다', N'가나다')

--데이터 검색
SELECT * FROM doit_unicode

--테이블 삭제
DROP TABLE doit_unicode


날짜형과 시간형

자료형데이터 크기 (byte)정확도설명
time3~5100나노초00:00:00.0000000 ~ 23:59:59.9999999까지 저장
date31일0001-01-01~9999-12-31까지 저장되며 날짜만 저장
smalldatetime41분1900-01-01 00:00:00 ~ 2079-06-06 23:59:59까지 저장
datetime80,00333초1753-01-01 00:00:00.000 ~ 9999-12-31 23:59:59.997
datetime26~8100나노초DATETIME 형식에서 확장된 형식; 0001-01-01 00:00:00.0000000 ~ 9999-12-31; 23:59:59.9999999까지 저장
datetimeoffset8~10100나노초0001-01-01 00:00:00.0000000 ~ 9999 -12-31; 23:59:59.9999999까지 저장; 타임존 시간을 함께 저장

날짜 형식의 테이블을 생성한 다음 현재 시간을 각 여렝 같게 입력해 데이터가 어떻게 저장되는지 확인

CREATE TABLE data_table(
JustDate date,
JustTime time,
JustDateTime datetime,
JustDateTime2 datetime2);

INSERT INTO date_table
VALUES (SYSDATETIME(), SYSDATETIME(), SYSDATETIME(), SYSDATETIME());

SELECT * FROM date_table;

profile
이진 입니다

0개의 댓글