[DB] SQL Data Type

젠니·2023년 5월 26일
0

데이터베이스

목록 보기
1/21
post-thumbnail

1. 숫자형

< 정수형 >

  • TINYINT: 0 ~ 255 -> -128 ~ +127
  • SMALLINT: 0 ~ 65,535 -> -32,768 ~ 32,767
  • MEDIUMINT: 0 ~16,777,215 -> -8,388,608 ~ 8,388,607
  • INT: 0 ~ 4,294,967,295 -> 2,147,483,648 ~ 2,147,483,647
  • BIGINT: 0 ~ (2^64-1)

< 실수형 >

  • DECIMAL(p,s): p = 소수 전체 자리수, s = 소수 이하 자리수

디폴트 부호 특성은 SIGNED 이므로, 부호를 사용하지 않으려면 UNSIGNED 선언해야함

2. 문자형

< 고정길이 문자열 >

항상 n개 문자를 저장한다.

  • CHAR(n): 최대 255문자

< 가변길이 문자열 >

최대 n개 문자까지 저장한다.

  • VARCHAR(n): 최대 65,535 문자
  • 1/2 byte prefix + data

여기서 CHAR(50)의 경우, 우측의 남는 공간을 공백으로 채운다.

< TEXT 문자열 >

VARCHAR(n)과 동일하나 n은 미리 할당된 값을 사용한다.

  • TINYTEXT: 최대 255문자
  • TEXT: 최대 65,535문자
  • MEDIUMTEXT: 16,777,215문자
  • LONGTEXT: 4,294,967,295문자

< ENUM 나열형 >

나열된 문자열 중 하나의 문자열만 갖는다.

  • Continent ENUM('Asia', 'Europe', 'America', 'Africa', 'OCeana')

< SET 나열형 다중값 >

NULL 포함 1개 이상의 문자열을 갖는다.

  • Symptom SET('sneezing', 'runny nose', 'stuffy head')
  • CREATE TABLE MySet (
    	Id INT,
    	Col SET(‘one’, ‘two’, ‘three’)
    );
    INSERT INTO 		MySet (Id, Col)
    VALUES 				(1, ‘one’), (2, ‘one,two’);
    SELECT 				Id, Col
    FROM 				MySet;

단, PK or FK 에는 ENUM/SET 사용 불가능

3. 이진 문자형

< 고정길이 이진 문자열 >

항상 n개 바이트를 저장한다.

  • BINARY(n)

< 가변길이 이진 문자열 >

최대 n개 바이트까지 저장한다.

  • VARBINARY(n): 1/2 byte prefix + data

< BLOB 이진 문자열 >

VARBINARY(n)과 동일하나 n은 미리 할당된 값을 사용한다.

  • TINYBLOB: 1 byte prefix + data
  • BLOB: 2 byte prefix + data
  • MEDIUMBLOB: 3 byte prefix + data
  • LONGBLOB: 4 byte prefix + data

TEXT/BLOB <-> VARCHAR(n)/VARBINARY(n) 차이점은? -> TEXT/BLOB 는 반드시 index prefix length 설정해줘야한다. 그리고 TEXT/BLOB 는 디폴트 값을 가질 수 없다.

4. 날짜형

< YEAR >

  • YYYY
  • '2019'

< DATE >

  • YYYY-MM-DD
  • '2019-08-04'

< TIME, TIME(fsp) >

  • HH:MM:SS[.fraction]
  • '12:59:02.000001' (fsp = 6) -> fsp 는 자리수

< DATETIME, DATETIME(fsp) >

  • YYYY-MM-DD HH:MM:SS[.fraction]
  • '2019-08-04 12:59:02'

string 으로 보고 그대로 저장한다.

< TIMESTAMP, TIMESTAMP(fsp) >

  • '2019-08-04 12:59:02'

보여질 때는 DATETIME과 동일하다. 보여질 때 편하라고 계산한 후 보여주는 것이다.

근데 왜 굳이 만들었을까? 메모리 상 효율적이기 때문이다.

DATETIME은 string으로 저장하지만, TIMESTAMP는 정수로 저장한다.

profile
젠니의 개발 라이푸우

0개의 댓글