[펌글] MySql 데이터타입

By | 12월 30, 2009

- 출처 :  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

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments