Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL UNSIGNED SMALLINT(6)의 최대값은 얼마일까? 값 범위와 ZEROFILL 완벽 정리

MySQL에서 UNSIGNED SMALLINT(6)의 최대값은 65,535입니다. 흥미로운 점은 괄호 안의 숫자 '6'이 실제 저장 가능한 값의 범위에는 전혀 영향을 주지 않는다는 것입니다. 이 숫자는 명령줄에서 값을 출력할 때의 자릿수(display width)를 지정하는 용도로만 사용됩니다.

SMALLINT 타입의 값 범위

SMALLINT는 부호(signed)와 무부호(unsigned) 선언에 따라 다음과 같은 범위를 가집니다.

  • 부호 있는(signed) 최소값: -32,768
  • 부호 있는(signed) 최대값: 32,767
  • 부호 없는(unsigned) 최대값: 65,535

ZEROFILL을 활용한 예제

ZEROFILL 옵션과 함께 SMALLINT(6)가 실제로 어떻게 동작하는지 예제 테이블을 만들어 확인해 보겠습니다.

mysql> create table smallIntDemo
-> (
-> FirstNumber smallint(6) zerofill
-> );
Query OK, 0 rows affected (1.95 sec)

최대값 범위 내 데이터 삽입

이제 INSERT 명령으로 레코드를 삽입해 보겠습니다. UNSIGNED SMALLINT의 최대값은 65,535이므로, 이 범위를 초과하는 값은 테이블에 저장되지 않습니다. 먼저 최대 범위보다 작은 값들을 차례로 삽입합니다.

mysql> insert into smallIntDemo values(2);
Query OK, 1 row affected (0.21 sec)

mysql> insert into smallIntDemo values(23);
Query OK, 1 row affected (0.21 sec)

mysql> insert into smallIntDemo values(234);
Query OK, 1 row affected (0.17 sec)

mysql> insert into smallIntDemo values(2345);
Query OK, 1 row affected (0.15 sec)

mysql> insert into smallIntDemo values(23456);
Query OK, 1 row affected (0.48 sec)

범위를 초과하는 값 삽입 시 발생하는 오류

반면 최대값인 65,535를 초과하는 값을 삽입하면 오류가 발생하며 데이터가 저장되지 않습니다.

mysql> insert into smallIntDemo values(234567);
ERROR 1264 (22003): Out of range value for column 'FirstNumber' at row 1

mysql> insert into smallIntDemo values(111111);
ERROR 1264 (22003): Out of range value for column 'FirstNumber' at row 1

조회 결과로 확인하는 표시 자릿수

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from smallIntDemo;

아래 출력 결과를 통해 SMALLINT(6)의 숫자 '6'이 자릿수 표시에 어떻게 활용되는지 확인할 수 있습니다. ZEROFILL 옵션 덕분에 6자리보다 짧은 값들은 앞자리가 0으로 채워져 표시됩니다.

+-------------+
| FirstNumber |
+-------------+
|      000002 |
|      000023 |
|      000234 |
|      002345 |
|      023456 |
+-------------+
5 rows in set (0.00 sec)

정리

결론적으로 MySQL의 UNSIGNED SMALLINT(6)에서 숫자 6은 저장 범위와 무관하며, 최대값은 항상 65,535입니다. 참고로 MySQL 8.0.17 버전부터는 정수 타입의 표시 폭(display width)이 공식적으로 지원 중단(deprecated)되었으므로, 새로운 프로젝트에서는 SMALLINT UNSIGNED처럼 표시 폭 없이 선언하는 것이 권장됩니다.