MySQL
31. MySQL tinyint(1) vs tinyint(4) 차이
drizzle0925
2021. 7. 25. 14:48
728x90
사내에서 MySQL을 사용하고 있는 때때로 on/off 용도의 칼럼을 추가할 일이 생겼다.
이런 칼럼을 선언할 때 나는 일반적으로 다음과 같이 사용하였다.
`anwser_flag` tinyint(1) unsigned not null default 0 comment '답변 플래그',
위와 같이 tinyint(1)로 선언해서 사용했는데 문득 tinyint(4)와 무슨 차이가 있을지 궁금해서 내용을 찾아보게 되었다.
tinyint(1) vs tinyint(4)
- 정수 타입의 데이터를 선언할 때 뒤의 길이 지정은 ZEROFILL 옵션이 없으면 아무런 의미가 없다고 한다. tinyint(1)로 선언하나 tiniyint(4)로 선언하나 해당 값에 들어갈 수 있는 데이터는 -127 ~ 127까지의 숫자로 데이터에는 영향을 미치지 않는다.
- 즉, 정수 타입에서는 아무런 의미가 없다.
ZEROFILL
- ZEROFILL 옵션은 실질 숫자 값의 앞쪽에 0을 패딩 해서 가져올 것인지를 설정하는 옵션이다.
- 다만 ZEROFILL 옵셥을 사용한다는 것은 해당 칼럼은 unsinged 타입이 되어버려 양수만 저장할 수 있다.
a는 ZEROFILL 옵션 미지정, b는 ZEROFILL 옵션 지정
mysql> SELECT * FROM test;
+------------+-------------+
| a | b |
+------------+-------------+
| 30 | 00000000030 |
| 1234567890 | 01234567890 |
| 111111 | 00000111111 |
+------------+-------------+
결론적으로 tinyint(1)을 쓰나 tinyint(4)를 쓰나 큰 차이가 없다는 의미이다.
단지, 테이블 구조를 조회했을 때 한눈에 알아볼 수 있도록 앞으로 YN의 값으로 사용할 때는 tinyint(1)을 사용하고 작은 타입의 int를 사용할 때는 tinyint(4)로 데이터 타입을 지정할 생각이다.
728x90