DATABASE

    mysql
    문자형 데이터
    • 조회수 5,220
    • 작성일 2008-08-03
    •  
    문자형 데이터


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

    * 종류 및 설명

    ------------------------------------------------------------------------------------
    [자료형] [설명]
    ------------------------------------------------------------------------------------
    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. 검색속도를 향상 시킨다.