데이터 타입

실무에서 자주 사용되는 데이터 타입에 대해 알아보자!

정수

  • Tinyint: 소형 테이블의 PK 타입으로 자주 사용된다.
  • Bigint: 대략 920경 정도이다.


실수

🚨 위 부동소수점 타입들은 소수점 표현 시 근사치를 나타내게 된다. 표현 가능한 소숫점 자릿수가 제한되기 때문이다.

돈 계산과 같이 정확한 소수점 표현이 필요하다면 decimal 타입을 사용하자.

decimal 타입은 4~16byte로 비교적 메모리를 많이 사용하긴 하지만, 소수점을 정확히 표현하기 때문에, 돈 계산과 같이 정확한 수치를 다뤄야 하는 경우에는 실수 타입으로 deciaml 사용을 권고하고 있다. numeric 이라는 타입도 존재하는데, deciaml 하고 똑같다고 보면된다. 그러니깐 decimal 을 그냥 사용하자.


문자

  • char: 고정길이 타입이다. char(10) = 'ab'와 같이 2글자만 할당해도 10byte 모두 사용한다.
  • varchar: 가변길이 타입이다. varchar(50) = 'ab' 와 같이 2글자만 할당하면 2byte만 사용하여 메모리를 효율적으로 사용한다. 따라서 varchar를 보통 많이 사용한다. 보통 50 정도로 할당해준다.
  • Text: 가변길이 타입이다. varchar(max)와 같다고 보면된다. 엄청 큰 내용들의 문자들을 집어넣을 때 사용한다.

🚨 주의

varchar(max)Text 타입은 크기가 매우 클 수 있기 때문에 PK로 정하거나, 인덱스 생성하거나 정렬 등을 할 수 없게 되므로 주의하자. 매우 큰 문자열을 가지고 인덱싱, 정렬 등을 하는 것은 성능 상 매우 안 좋기 때문이다.


유니코드(unicode)

문자 타입에 접두사로 n만 붙여주면 유니코드 문자데이터로 인코딩된다.


날짜, 시간, 화폐

  • 날짜와 시간을 표현할 때는 표현하려는 시간 범위와 메모리량을 고려하여 datetimesmalldatetime 둘 중에 하나를 알맞게 사용하자.
  • 타임존을 고려한 글로벌한 서비스의 경우 timestamp 타입을 사용하는 것이 권장되고 있다.
  • 화폐 단위는 사용하지 말자. 대신 decimal을 사용하자.


unique identifier

NEWID() 함수는 GUID를 생성해준다. 이것을 사용할 바에 차라리 범위가 매우 큰 bigint를 사용하자.

1
2
3
4
5
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
PRINT 'Value of @myid is: ' + CONVERT(varchar(255), @myid)
INSERT INTO TEST(UNIQUEID) VALUES (NEWID())
SELECT * FROM TEST

GUID ???

SQL Server에서 NEWID() 함수는 새로운 GUID(전역 고유 식별자)를 생성해준다. GUID는 전 세계적으로 고유한 값을 나타내는 128비트 숫자이다.