MySQL zerofill
2023. 12. 25. 04:12ㆍ카테고리 없음
728x90
반응형
1. MySQL zerofill
보통 DBMS에서 ()괄호를 사용할 경우 ()괄호 안에는 숫자의 의미는 대체로 사용할 수 있는 자리수나 바이트의 제한 또는 정수부 와 소수부를 구분하는 등의 길이의 의미로 사용된다.
그런데 MySQL의 정수형 컬럼인 INT, BIGINT, SMALLINT, TINYINT
은 이미 고정형 데이터 타입으로 크기를 제한하는 위의 예시와 다르게 사용된다.
varchar(10) //문자열 길이 제한
float(10, 2) //정수부, 소수부 길이 제한 (총 10자리 중 소수부 2자리)
int(10) //???
정수형 컬럼은 zerofill
옵션을 사용한다면 괄호안의 숫자만큼 빈곳을 0으로 표시한다.
MariaDB [TEST]> create table test
-> (
-> col int(5) zerofill
-> );
MariaDB [TEST]> insert into test values (123), (12345), (1234567);
MariaDB [TEST]> select * from test;
+---------+
| col |
+---------+
| 00123 |
| 12345 |
| 1234567 |
+---------+
위의 예시에서 숫자 123이 들어간 첫번째 row가 select 시에 00123으로 되어있는 것을 볼 수 있다.
이처럼 정수형의 괄호는 값의 길이를 설정, 제한하는 용도가 아닌 화면에 표시할 자리수를 의미한다. (zerofill 옵션 사용시)
2. 주의할 점
zerofill
옵션을 사용할때는 주의할 점이 있다.
정수 타입에서 zerofill
옵션을 사용한다면 해당 컬럼은 자동으로 unsigned가 된다는 것이다.
아래와 같이 테이블 생성 구문을 확인해보면 zerofill
옵션을 사용한 컬럼은 unsigned
로 생성된 것을 확인할 수 있다.
MariaDB [TEST]> show create table test;
+-------+---------------------+---------------------------------------------+
| Table | Create Table | |
+-------+---------------------+---------------------------------------------+
| test | CREATE TABLE `test` ( |
| | `col` int(5) unsigned zerofill DEFAULT NULL |
| |) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |
+-------+-------------------------------------------------------------------+
3. deprecated
MySQL 8.0.17부터 numeric data type의 zerofill
옵션은 deprecate 되었다.
앞으로 자리수 패딩이 필요한 상황이라면 LPAD()
함수를 사용하는 것이 좋다.
MariaDB [TEST]> select LPAD(123, 5, 0);
+-----------------+
| LPAD(123, 5, 0) |
+-----------------+
| 00123 |
+-----------------+
728x90
반응형