테이블을 만들 때 각 열에 대해서 데이터 형식을 정해야한다.
데이터 형식에는 크게 숫자, 문자, 날짜 등이 있고 세부적으로는 여러 개로 나뉘기도 한다.
| 데이터 형식 | 바이트 수 |
|---|---|
| TINYINT | 1 |
| SMALLINT | 2 |
| INT | 4 |
| BIGINT | 8 |
주로 INT를 사용하며 숫자 범위는 바이트수를 따르며 각 형식의 범위를 벗어나면 OUT OF RANGE 에러가 출력된다.
기본적인 형태는 - 범위에서 + 범위까지로 진행이 되나, UNSIGNED 예약어를 사용한다면 0부터 - 범위만큼 추가된 + 범위를 사용할 수 있다
(예를 들면 -128 ~ 127인 경우 UNSIGNED를 통해 0 ~ 255로 사용 가능하다.)
| 데이터 형식 | 바이트 수 |
|---|---|
| CHAR(갯수) | 1 ~ 255 |
| VARCHAR(갯수) | 1 ~ 16383 |
CHAR는 고정길이 문자형이며 갯수 자리에 단위를 적어 자릿수를 고정시킨다.
예를 들면 CHAR(5)라고 사용하는 경우 'ㅁㄴㅇ' 3글자를 저장하는 경우 먼저 5글자의 자리를 확보한 뒤 3글자를 저장하도록 한다.
VARCHAR의 경우는 가변길이 문자형으로 최대 갯수를 지정하고 그보다 적은 크기의 데이터를 저장하는 경우 크기에 맞춰 사용한다.
VARCHAR가 CHAR보다 공간을 효율적으로 사용하지만 내부적인 속도 측면에서는 CHAR로 설정하는 것이 조금 더 빠르기 때문이다.
주로 CHAR는 글자 갯수가 고정되는 경우, VARCHAR는 글자 갯수가 변동이 되는 경우 사용한다.
문자형 데이터인 CHAR는 최대 255자, VARCHAR는 16383자 까지 지정이 가능하지만 그보다 큰 데이터는 저장할 수 없다.
이러한 경우 더 큰 데이터를 저장하기 위해 아래와 같은 형식을 사용한다.
| 데이터 형식 | 세부 형식 | 바이트 수 |
|---|---|---|
| TEXT | TEXT | 1 ~ 65535 |
| TEXT | LONGTEXT | 1 ~ 4294967295 |
| BLOB | BLOB | 1 ~ 65535 |
| BLOB | LONGBLOB | 1 ~ 4294967295 |
TINY, MEDIUM 등의 사이즈도 있으나 자주 활용하지 않는다.
대량의 텍스트(대본, 소설 등)을 저장하는 경우 TEXT, LONGTEXT를 사용하고 이미지, 동영상 등의 데이터를 저장하는 경우 BLOB, LONGBLOB을 사용한다.
BLOB이란?
Binary Long Object 의 약자로 글자가 아닌 이미지, 동영상 등의 대용량 데이터를 이진 데이터
형식으로 저장하는 것을 말한다.
소수점이 있는 숫자 데이터를 저장하는 경우 사용한다.
| 데이터 형식 | 바이트 수 | 자릿수 |
|---|---|---|
| FLOAT | 4 | 소수점 아래 7자리 |
| DOUBLE | 1 ~ 16383 | 소수점 아래 15자리 |
보통 과학 기술용 데이터가 아니면 FLOAT를 주로 사용한다.
날짜 및 시간을 저장하는데 사용한다.
| 데이터 형식 | 바이트 수 | 형태 |
|---|---|---|
| DATE | 3 | 날짜만 저장, YYYY-MM-DD |
| TIME | 3 | 시간만 저장, HH:MM:SS |
| DATETIME | 8 | 둘 다 저장, YYYY-MM-DD HH:MM:DD |
날짜 또는 시간을 입력하는 경우 '' 로 묶어야 한다.
SQL도 다른 언어와 유사하게 변수를 선언하고 활용할 수 있다.
형태는 아래와 같다.
SET @변수명 = VALUE;
SELECT @변수명 = VALUE;
단, LIMIT에서는 변수를 사용할 수 없으며 LIMIT에 변수를 사용하기 위해서는 PREPARE와 EXECUTE를 사용해야 한다.
SET @COUNT = 3;
PREPARE ~ FROM 'SELECT NAME, NUM FROM ~ ORDER BY NUM LIMIT ?';
EXECUTE ~ USING @COUNT;
문자형을 정수형으로 바꾸거나, 정수형을 문자열로 바꾸는 과정을 데이터의 형 변환이라고 부른다.
형 변환은 직접 함수를 사용하는 명시적 변환과 자연스럽게 변환되는 암시적 변환이 있다.
CAST (값 AS 형식 [ (길이) ])
CONVERT (값, 형식[ (길이) ])
위 두가지 형식이 있다.
CAST나 CONVERT를 사용하지 않고도 자연스럽게 바뀌는 형태를 말한다.
예를 들면 '100' + '200'의 경우 문자열을 더할 수 없으므로 자동으로 덧셈을 수행한다.
SELECT '100' + '200'
> 300
만약 두 문자를 합하고 싶으면 CONCAT을 통해 합쳐야한다.
SELECT CONCAT('100', '200')
> '100200'