– 출처 :  http://angelsoma.com/view.php?id=mysql&no=12 –
 

Mysql 에서 사용되는 데이터 타입에대한 설명이다.

1. 숫자형 데이터 타입

    숫자형은 가장 기본적인 자료형으로서 말 그래도 숫자들을 저장하는 자료형입다.
    숫자형의 기본적인 자료형은 정수형과 소수형 두가지로 나눌수있다.
    정수형의 자료는 SIGNED 와 UNSIGNED 로 나눌수있다
    SINGED는 부호를 가질수있는 수를 나타내고, UNSINGED는 부호가 없는 수를 나타낸다.
  
    SIGNED – 음수,양수 모두 저장 가능
    UNSIGNED – 양수만 저장 가능
    
    * 종류 및 설명

    ————————————————————————————
    [자료형]                   [다룰수있는 범위]                [저장에 필요한 BYTE 수]     ————————————————————————————
     TINYINT                   SIGNED : -128 ~ 127                     1 BYTE
                               UNSINGED : 0 ~ 255
    ————————————————————————————
     SMALLINT                  SIGNED : -32768 ~ 32767                 2 BYTE
                               UNSIGNED : 0 ~ 65535    
    ————————————————————————————
     MEDIUMINT                 SIGNED : -8388608 ~ 8388607             3 BYTE
                               UNSIGNED : 0 ~ 16777215
    ————————————————————————————
     INT                       SINGED : -2147483648 ~ 2147483647       4 BYTE
                               UNSIGNED : 0 ~ 4294967295
    ————————————————————————————
     INTEGER                   INT 와 동일
    ————————————————————————————
     BIGINT                    SINGED : -9223372036854775808 ~
                                         9223372036854775807
                               UNSIGNED : 0 ~ 18446744073709551615     8 BYTE
    ————————————————————————————
     FLOAT                     최소값 : +-1.175494351E-38
                               최대값 : +-3.402823466E+38              4 BYTE
    ————————————————————————————
     BOUBLE                    최소값 : +-2.2250738585072014E-308
                               최대값 : +-1.17976931348623157E+308     8 BYTE
    ————————————————————————————
     DOUBLE PRECISION          DOUBLE 동일                             8 BYTE
    ————————————————————————————
     REAL                      DOUBLE 동일                             8 BYTE
    ————————————————————————————
     DECIMAL                   DOUBLE 동일                             경우에따라
    ————————————————————————————

    * UNSIGNED 사용방법

      mysql> create table kkk(
          -> num tinyint,
          -> count tinyint unsigned
          -> );
      Query OK, 0 rows affected (0.00 sec)

      mysql> desc kkk;
      +——-+———————+——+—–+———+——-+
      | Field | Type                | Null | Key | Default | Extra |
      +——-+———————+——+—–+———+——-+
      | num   | tinyint(4)          | YES  |     | NULL    |       |
      | count | tinyint(3) unsigned | YES  |     | NULL    |       |
      +——-+———————+——+—–+———+——-+
      2 rows in set (0.00 sec)
                        
        
     * AUTO_INCREMENT / ZEROFILL 이라는 속성하용하기

       mysql> create table zzz (
       ->
       -> num int(10) not null auto_increment,
       -> count int zerofill,
       -> primary key(num)
       -> );
       Query OK, 0 rows affected (0.00 sec)

       mysql> desc zzz;
       +——-+—————————+——+—–+———+—————-+
       | Field | Type                      | Null | Key | Default | Extra          |
       +——-+—————————+——+—–+———+—————-+
       | num   | int(10)                   |      | PRI | NULL    | auto_increment |
       | count | int(10) unsigned zerofill | YES  |     | NULL    |                |
       +——-+—————————+——+—–+———+—————-+
       2 rows in set (0.00 sec)  

      
       mysql> insert into zzz values (’55’,’55’);
       Query OK, 1 row affected (0.00 sec)

       mysql> select * from zzz;
       +—–+————+
       | num | count      |
       +—–+————+
       |  55 | 0000000055 |
       +—–+————+
       1 row in set (0.00 sec)  

       ZEROFILL 로 정의된 필드에 값이 어떻게 입력되는지 확인하면 이 정의의 필요성을 알수
       있을거라 생각됩니다.

2. 문자형 데이터

    문자형은 의미상으론 문자열을 저장하는 자료형이지만 문자열 외에도 이미지,동여상등의
    바이너리 파일을 보관할수이다.

    * 종류 및 설명
  
    ————————————————————————————
    [자료형]                   [설명]     ————————————————————————————
    CHAR(M)                     M만큼의 문자를 저장할수있다,최대 255 문자
    ————————————————————————————
    VARCHAR(M)                  CHAR 와 같이 M 만큼의 문자를 저장할수있다. 최대 255 문자
    ————————————————————————————
    TINYTEXT                    255개의 문자를 저장할수있다.
    ————————————————————————————
    TINYBLOB                    255개의 문자를 저장할수있다.
    ————————————————————————————
    TEXT                        65535 개의 문자를 저장할수있다.
    ————————————————————————————
    BLOB                        65535 개의 문자를 저장할수있다.
    ————————————————————————————
    MEDIUMTEXT                  16777215 개의 문자를 저장할수있다.
    ————————————————————————————
    MEDIUMBLOB                  16777215 개의 문자를 저장할수있다.
    ————————————————————————————
    LONGBLOB                    4294967295 (4G) 개의 문자를 저장할수있다.
    ————————————————————————————
    LONGTEXT                    4294967295 (4G) 개의 문자를 저장할수있다
    ————————————————————————————
    ENUM(‘value1’,’value2’…)  문자를 숫자형으로 보관할때 사용
    ————————————————————————————
    SET(‘value1’,’value2’….)  문자를 숫자형으로 보관할때 사용                      
    ————————————————————————————

    
    * CHAR 와 VARCHAR 의 장단점

      둘다 최대 255 문자를 가진다는 점에서는 동일하다.
      만약 CHAR(10), VARCHAR(10) 이렇게 테이블을 생성하였다면 둘다 최대 10 BYTE 를 저
      장할수있다.

      만약 둘다 5 개의 문자를 저장한다면 어떻게 될까.

      CHAR – 비록 5 개의 문자를 저장하지만 10 BYTE 를 다 사용한다.
      VARCHAR – 5 BYTE만 사용한다.

      VARCHAR 이 훨씬 저장장치를 효율적으로 사용할수있다.
      그러나 CHAR 이 검색에서는 훨씬 좋은 효과를 발휘한다.

    * 검색시 대소문자 구별하기

      일반적으로 CHAR / VARCHAR는 검색시 대,소문자를 구별하지 않는다.
      SOMA 를 찾으나 soma 를 찾으나 둘다 출력이된다.
      이렇게 검색시 대소문자를 별하기 위해서는 테이블 생성시 이를 정의해야한다.

      BINARY 속성이 그것이다.

      mysql> create table ppp (
          ->
          -> num int(10) not null auto_increment,
          -> name varchar(50) BINARY,
          -> primary key(num)
          -> );
      Query OK, 0 rows affected (0.00 sec)

      mysql> desc ppp;
      +——-+——————–+——+—–+———+—————-+
      | Field | Type               | Null | Key | Default | Extra          |
      +——-+——————–+——+—–+———+—————-+
      | num   | int(10)            |      | PRI | NULL    | auto_increment |
      | name  | varchar(50) binary | YES  |     | NULL    |                |
      +——-+——————–+——+—–+———+—————-+
      2 rows in set (0.00 sec)

  
    * TEXT 와 BLOB 의 차이

      TEXT 는 아주긴 CHAR 라고 생각하면 된다.
      TEXT 는 문자열을 저장할때 사용.
    
      BLOB 는 아주긴 BINARY CHAR 라고 생각하면 된다.
      BLOB 는 동영상이나 이미지를 저장할때 사용.

    * ENUM / SET 사용하기

      ENUM 과 SET 은 MYSQL 내에서 문자열을 숫자로 저장할때 사용된다.

      mysql> create table qqq (
          ->
          -> num int(10) not null auto_increment,
          -> sex ENUM(‘남자’,’여자’),
          -> primary key(num)
          -> );
      Query OK, 0 rows affected (0.00 sec)

      mysql> desc qqq;
      +——-+———————+——+—–+———+—————-+
      | Field | Type                | Null | Key | Default | Extra          |
      +——-+———————+——+—–+———+—————-+
      | num   | int(10)             |      | PRI | NULL    | auto_increment |
      | sex   | enum(‘남자’,’여자’) | YES  |     | NULL    |                |
      +——-+———————+——+—–+———+—————-+
      2 rows in set (0.00 sec)

      
      mysql> insert into qqq (sex) values (‘남자’);
      Query OK, 1 row affected (0.00 sec)

      mysql> select * from qqq;
      +—–+——+
      | num | sex  |
      +—–+——+
      |   1 | 남자 |
      +—–+——+
      1 row in set (0.00 sec)

      mysql> insert into qqq (sex) values (‘2’);
      Query OK, 1 row affected (0.00 sec)

      mysql> select * from qqq;
      +—–+——+
      | num | sex  |
      +—–+——+
      |   1 | 남자 |
      |   2 | 여자 |
      +—–+——+
      2 rows in set (0.00 sec)

      mysql> insert into qqq (sex) values (‘1’);
      Query OK, 1 row affected (0.00 sec)

      mysql> select * from qqq;
      +—–+——+
      | num | sex  |
      +—–+——+
      |   1 | 남자 |
      |   2 | 여자 |
      |   3 | 남자 |
      +—–+——+
      3 rows in set (0.00 sec)

      
      위에서 처럼 ENUM 으로 정의된 필드는 SELECT 에서는 문자열로 출력되지만 실질적으로
      저장장치에는 숫자로 저장된다..

    * ENUM 의 장점

      1. 공간을 절약할수있다.
      2. 검색속도를 향상 시킨다.

3. 날짜와 시간 데이터

    * 종류 및 설명
    ————————————————————————————
    [자료형]          [설명]     ————————————————————————————
    DATETIME          날짜와 시간을 저장,YYYY-MM-DD HH:MM:SS 형식으로 저장
                      1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 까지 저장
    ————————————————————————————
    DATE              DATETIME 형 자료로서 날짜 부분만 저장
                      1000-01-01 ~ 9999-12-31 까지 저장
    ————————————————————————————
    TIMESTAMP(M)      M 에따라 다양한 형태의 날짜를 저장할수 있다.
    ————————————————————————————
    TIME              DATETIME 에서 TIME 부분에 해당하는 시간 형식의 자료를 저장
    ————————————————————————————
    YEAR              연도만을 저장하는 자료형
    ————————————————————————————

    * TIMESTAMP(M) 사용
                    
        TIMESTAMP(14) = YYYYMMDDHHMMSS
        TIMESTAMP(12) = YYMMDDHHMMSS
        TIMESTAMP(10) = YYMMDDHHMM
        TIMESTAMP(8)  = YYYYMMDD
        TIMESTAMP(6)  = YYMMDD
        TIMESTAMP(4)  = YYMM
        TIMESTAMP(2)  = YY