Type | Bytes | Minimum Value | Maximum Value |
| | (Signed/Unsigned) | (Signed/Unsigned) |
TINYINT | 1 | -128 | 127 |
| | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 |
| | 0 | 65535 |
MEDIUMINT | 3 | -8388608 | 8388607 |
| | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 |
| | 0 | 4294967295 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
| | 0 | 18446744073709551615 |
Column Type | Storage Required |
DATE | 3 bytes |
DATETIME | 8 bytes |
TIMESTAMP | 4 bytes |
TIME | 3 bytes |
YEAR | 1 byte |
Column Type | ``Zero'' Value |
DATETIME | '0000-00-00 00:00:00' |
DATE | '0000-00-00' |
TIMESTAMP | 00000000000000 |
TIME | '00:00:00' |
YEAR | 0000 |
MySQL 에서 INT 는 4바이트입니다. -2147483648 ~ 2147483647 까지 표현할 수 있죠.
UNSIGNED INT는 0 ~ 4294967295 까지 표현할 수 있습니다.
INT나 UNSIGNED INT 모두 표현할 수 있는 숫자의 종류는 2^32 = 4294967296 가지 입니다.
단지 표현 범위가 다를 뿐이죠.
그리고 말씀하신 0 ~ 255 까지 표현이 가능한건 TINYINT UNSIGNED 입니다.
그냥 TINYINT 는 -128 ~ 127 까지 표현이 가능합니다.
같은개수의 비트에서 음수를 표현하려면 제일 처음의 비트는 부호비트로 사용된답니다.
부호비트를 사용하지 않으면 숫자의 최대 크기가 두배가 되겠죠.
아무튼.. UNSIGNED 를 사용하는 이유는 컬럼의 효율성을 목적으로 합니다.
컬럼에 들어갈 값이 0~200 까지의 숫자라면 TINYINT UNSIGNED(0~255) 를 사용하던가
SMALLINT(-32768 ~ 32767) 등을 사용할 수 있지만 1바이트짜리 TINYINT UNSIGNED를
사용하는게 가장 적은 공간을 차지하기 때문에 가장 올바른 선택이라고 할 수 있죠.
UNSIGNED 라는게 존재하지 않으면 공간을 두배나 차지하는 SMALLINT를 사용하는 수밖에요.