CS/데이터베이스

[CS] 데이터베이스 - 속성의 타입

장아장 2023. 6. 9. 22:26

숫자 타입

  TINYINT SMALLINT MEDIUMINT INT BIGINT
용량 1Byte 2Byte 3Byte 4Byte 8Byte
값의 범위(부호 있음) -128~127 -128~127 -32768~32767 -8388608~
           8388607
 -2147483648~
         2147483647
값의 범위(부호 없음) 0~255 0~255 0~65535 0~16777215 0~4294967295

 

문자 타입

  • CHAR
    • 괄호를 쳐서 저장가능한 길이를 정할 수 있다. 
    • 0~255의 고정길이를 저장하게 된다. 
  • VARCHAR
    • 괄호를 통해 0~65535의 길이를 정할 수 있다. 
    • 입력 길이만큼의 바이트 + 길이 저장용 1바이트의 공간을 가진다. 
    • 가변길이로 저장된다. 
  • TEXT
    • 큰 문자열(게시물의 내용, 메일)에 쓰인다.
  • BLOB
    • 이미지, 동영상 저장등에 쓰인다. 
    • 실제로는 아마존 S3에 저장한 후, VARCHAR에 해당 파일의 주소를 저장한다. 

날짜 타입

타입명 DATE DATETIME TIMESTAMP
용량 3Byte 8Byte 4Byte
저장 구조 1000-01-01~9999-12-31 1000-01-01 00:00:00 ~ 
           9999-12-31 23:59:59
1970-01-01 00:00:01 ~ 
            2038-01-19 03:14:07

특수 타입

  • ENUM
    • enum은 자바를 기준으로 괄호에 가진 values를 인스턴스로 가지는 클래스들의 선형구조이다. 
    • 데이터베이스에 들어갈 때에는 0~65535까지의 해당 구조의 인덱스로 저장된다.
    • 자바에서는 그래서 @Enumrated을 통해 문자열로, 혹은 인덱스로 저장하는 방식을 선택할 수 있다.
  • SET
    • ENUM을 여러 개 저장할 수 있는 구조
    • 비트 연산자로 인덱스들을 담아 저장하는 구조이다. 
    • 최대 64개의 요소를 집어넣을 수 있다. 

유의 사항 : ENUM, SET은 선형 구조의 인덱스를 기반으로 저장한다. 

예를 들어

새로운 UI의 인텔리제이...아주 마음에 들어(?)

이런 구조에서, USER를 저장하면 0으로 저장된다. 

인덱스가 틀어지면? 지금까지의 데이터가 모두 예상값과 다르게 저장된다. 

이를 유의해야 한다. 

 

ps. 테이블간의 관계에 대해서는 JPA의 매핑을 찾아보자.