MySQL ZEROFILL이란 무엇인가?
MySQL에서 숫자 컬럼에 ZEROFILL 속성을 지정하면, 해당 필드의 표시 값이 컬럼 정의에서 지정한 표시 너비(display width)만큼 자동으로 0(zero)으로 채워집니다. 이 기능은 주문 번호, 회원 번호처럼 일정한 자릿수를 유지해야 하는 데이터를 다룰 때 특히 유용합니다.
ZEROFILL 사용 예제
실제 동작을 확인하기 위해 showzerofill이라는 테이블을 생성하고 값을 삽입해 보겠습니다.
mysql> Create Table showzerofill(Val1 INT(5) ZEROFILL, Val2 INT(5)); Query OK, 0 rows affected (0.09 sec) mysql> Insert into showzerofill(Val1, Val2) values(1,1),(12,12),(123,123),(1234,1234),(12345,12345); Query OK, 5 rows affected (0.03 sec) Records: 5 Duplicates: 0 Warnings: 0
위 예제에서 Val1은 INT(5) ZEROFILL로 정의했고, Val2는 일반적인 INT(5)로 정의했습니다. 두 컬럼의 차이를 비교하면 ZEROFILL의 효과를 쉽게 이해할 수 있습니다.
조회 결과 비교
테이블을 조회하면 ZEROFILL이 적용된 Val1 컬럼의 값들이 지정된 너비(5자리)까지 0으로 채워져 있는 것을 확인할 수 있습니다.
mysql> Select * from showzerofill; +-------+-------+ | Val1 | Val2 | +-------+-------+ | 00001 | 1 | | 00012 | 12 | | 00123 | 123 | | 01234 | 1234 | | 12345 | 12345 | +-------+-------+ 5 rows in set (0.00 sec)
결과 분석
- Val1 (ZEROFILL 적용): 값이 5자리 미만일 경우 앞부분이 0으로 채워집니다. 예를 들어 1은 '00001'로, 123은 '00123'으로 표시됩니다.
- Val2 (ZEROFILL 미적용): 일반적인 우측 정렬 형태로 값이 그대로 표시됩니다.
ZEROFILL 활용 시 알아두어야 할 점
- ZEROFILL을 적용한 컬럼에는 자동으로 UNSIGNED 속성이 함께 부여됩니다. 따라서 음수 값을 저장할 수 없습니다.
- 값의 실제 길이가 지정된 표시 너비보다 크더라도 값은 잘리지 않고 전체가 그대로 표시됩니다.
- 표시 너비(display width)는 저장 공간과는 무관하며, 단지 화면에 표시되는 형식에만 영향을 줍니다.
정리
이처럼 특정 너비를 유지하며 컬럼 값을 표시하고 싶다면, 해당 컬럼을 정의할 때 ZEROFILL 옵션을 사용하면 됩니다. 고정 자릿수의 코드나 번호 체계를 관리하는 데이터베이스 설계에서 매우 실용적인 기능입니다.