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

MySQL에서 YEAR(2)와 YEAR(4)의 차이점 완벽 정리

MySQL의 YEAR 타입은 연도를 저장하기 위한 전용 데이터 타입으로, 표시 자릿수에 따라 YEAR(2)와 YEAR(4)로 나뉩니다. 두 타입은 저장 형식과 표현 가능한 연도 범위에서 중요한 차이를 보입니다.

YEAR(2): 두 자리 연도 형식

YEAR(2)는 연도를 두 자리 숫자로 저장합니다. 예를 들어 1969년을 저장하려면 '69'라고 입력하면 됩니다. YEAR(2)에서 표현할 수 있는 연도 범위는 1970년부터 2069년까지이며, 입력 시에는 '70'부터 '69' 사이의 값을 사용합니다.

YEAR(4): 네 자리 연도 형식

YEAR(4)는 연도를 네 자리 숫자로 저장합니다. 예를 들어 1969년을 저장하려면 '1969'를 그대로 입력하면 됩니다. YEAR(4)에서 표현할 수 있는 연도 범위는 1901년부터 2155년까지로, YEAR(2)보다 훨씬 넓습니다.

두 자리 연도 값의 해석 규칙

MySQL은 두 자리 연도 값을 다음 규칙에 따라 해석합니다.

  • 00~69 범위의 값은 2000~2069년으로 변환됩니다.
  • 70~99 범위의 값은 1970~1999년으로 변환됩니다.

두 자리 연도 형식의 모호성 문제

날짜 값을 두 자리 형식으로 저장하는 것은 권장되지 않습니다. 세기 정보가 명확하지 않기 때문에 저장된 값이 모호해질 수 있습니다.

다음 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)

위 예제에서 '00'을 val 컬럼에 저장했을 때, 이것이 '1900'을 의미하는지 '2000'을 의미하는지 불분명합니다. MySQL은 이 값을 2000년으로 해석하므로, '1900'으로 조회하면 아무 결과도 반환되지 않습니다.

참고: YEAR(2)의 지원 중단

YEAR(2)는 MySQL 5.6.6 버전부터 공식적으로 지원이 중단(deprecated)되었으며, MySQL 8.0에서는 완전히 제거되었습니다. 따라서 새로운 프로젝트에서는 항상 YEAR 또는 YEAR(4)를 사용하고, 연도 값은 네 자리 숫자로 저장하는 것이 안전합니다.