MySQL의 YEAR(2) 데이터 타입은 연도를 두 자리 숫자 형식으로 저장합니다. 예를 들어 1969년을 저장하고 싶다면 69라고 입력하면 됩니다. YEAR(2)로 표현할 수 있는 연도 범위는 1970년부터 2069년까지이며, 각각 70부터 69까지의 값으로 입력합니다.
MySQL이 두 자리 연도 값을 해석하는 규칙
MySQL은 두 자리 연도 값을 다음과 같은 규칙에 따라 해석합니다.
- 00~69 범위의 값은 2000~2069년으로 변환됩니다.
- 70~99 범위의 값은 1970~1999년으로 변환됩니다.
그렇다면 왜 날짜 값을 두 자리 형식으로 저장하면 안 될까요? 핵심적인 이유는 세기(century) 정보가 없어 값이 모호해질 수 있기 때문입니다.
다음 MySQL 예제를 통해 이 문제를 더 명확하게 살펴보겠습니다.
mysql> Create Table year_test(val year(2));
Query OK, 0 rows affected, 1 warning (0.23 sec)
mysql> insert into year_test(val) values('70');
Query OK, 1 row affected (0.14 sec)
mysql> insert into year_test(val) values('00');
Query OK, 1 row affected (0.06 sec)
mysql> select * from year_test;
+-----+
| val |
+-----+
| 70 |
| 00 |
+-----+
2 rows in set (0.00 sec)
mysql> select * from year_test where val = '1970';
+-----+
| val |
+-----+
| 70 |
+-----+
1 row in set (0.03 sec)
mysql> select * from year_test where val = '2000';
+-----+
| val |
+-----+
| 00 |
+-----+
1 row in set (0.00 sec)
mysql> select * from year_test where val = '1900';
Empty set (0.06 sec)위 예제에서 val 컬럼에 00을 저장했다고 가정해 봅시다. 이 값이 과연 '1900년'을 의미하는 것일까요, 아니면 '2000년'을 의미하는 것일까요? 사람이 보기에는 판단하기 어렵습니다. MySQL은 앞서 설명한 규칙에 따라 이 값을 2000년으로 해석하지만, 데이터를 입력한 사람의 의도와 다르게 해석될 가능성이 항상 존재합니다.
이러한 모호성은 시간이 지나며 데이터를 다시 조회하거나 다른 시스템과 연동할 때 심각한 오류를 일으킬 수 있습니다. 따라서 연도를 저장할 때는 반드시 네 자리 전체 연도(예: YEAR(4) 또는 DATE 타입)를 사용하여 세기 정보를 명확히 하는 것이 올바른 방법입니다.