MySQL INT/BITINT ZEROFILL - 정수형 타입에서 ZEROFILL

Last Updated on 4월 4, 2021 by 태랑(정현호)



보통의 DBMS의 컬럼형에서 ()괄호를 사용할 경우 ()괄고 안에는 숫자의 의미는 사용할 수 있는 자리수나 바이트의 제한 또는 정수부 와 소수부를 구분하는 등의 길이의 의미로 많이 사용 하고 있습니다.

MySQL의 정수형 컬럼인 INT,BIGINT,SMALLINT,TINYINT 은 이미 고정형 데이터 타입으로 ()괄호의 사용이 위에서 언급한 부분과는 조금은 다른 의미로 사용 됩니다.


예를 들어 BIGINT(10) 과 같은 경우 정수 값의 길이를 10자리로 제한 할 수 있을것이라고 생각 할 수 있습니다

아래는 ZEROFILL 옵션을 이용하여 사용 여부에 따른 차이를 확인 하는 내용 입니다.

mysql> create table tb_int_test
(
col1 bigint(10) ZEROFILL
);

mysql> insert into tb_int_test values 
(123),(12345),(1234567),(1234567891011);

mysql> select * from tb_int_test;
+---------------+
| col1          |
+---------------+
|    0000000123 |
|    0000012345 |
|    0001234567 |
| 1234567891011 |
+---------------+



mysql> create table tb_int_test_no_zerofill
(
col1 bigint(10) 
);

mysql> insert into tb_int_test_no_zerofill  values 
(123),(12345),(1234567),(1234567891011);


mysql> select * from tb_int_test_no_zerofill;
+---------------+
| col1          |
+---------------+
|           123 |
|         12345 |
|       1234567 |
| 1234567891011 |
+---------------+


모든 정수 타입에서 생성시 뒤에 ()괄호는 값을 제한 하는 용도가 아닌 화면에 표시할 자리수를 의미하며 이 화면의 표시할 자리수라는 것도 ZEROFILL 옵션을 사용하였을 경우 숫자 왼쪽에 채워서(패딩) 표시하는 의미 입니다.

그래서 조회 결과를 보면 처음 3개의 숫자는 0이 채워져서 10자리를 만들어 진것을 확인 할 수 있으며, 10자리가 넘는 숫자 1234567891011 도 문제 없이 저장 및 조회가 되는 것을 확인 할 수 있습니다.


ZEROFILL 옵션을 사용 하였을 경우 몇 자리 까지 0을 붙여서(패딩) 표현할지에 사용되는 ()괄호 입니다.

그래서 정수 타입에서 ZEROFILL 의 옵션이 없다면 ()괄호 는 의미가 없으며 ZEROFILL 옵션을 사용하게 된다면 해당 컬럼은 양의숫자(양수)만 저장할 수 있는 UNSIGNED타입이 되게 됨으로 주의해야할 부분 입니다.


테이블 생성 구문으로 확인 해보면 아래와 같이 ZEROFILL 옵션을 사용한 컬럼은 UNSIGNED 로 생성되는 것을 확인 할 수 있습니다.

mysql> show create table tb_int_test\G
*************************** 1. row ***************************
       Table: tb_int_test
Create Table: CREATE TABLE `tb_int_test` (
  `col1` bigint(10) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4


[참고] 음수,양수 모두를 표현 할 수 있는 것은 SIGNED 이고 기본 값입니다. UNSIGNED를 명시적으로 지정하면 양수만 사용할 수 있습니다.



Ref Book : 개발자와 DBA를 위한 Real MySQL



연관된 다른 글

 

 

 

 

 

답글 남기기