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
|