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

MySQL에서 UNIX_TIMESTAMP()와 FROM_UNIXTIME()에 범위를 벗어난 값을 전달하면 어떻게 될까?

MySQL에서 날짜 및 시간 관련 함수를 사용할 때, 허용 범위를 벗어난 값을 인자로 전달하면 어떤 결과가 반환되는지 아는 것이 중요합니다. UNIX_TIMESTAMP()FROM_UNIXTIME()은 서로 반대 방향으로 동작하는 함수이지만, 범위 초과 값에 대한 처리 방식은 서로 다릅니다.

UNIX_TIMESTAMP()에 범위를 벗어난 값 전달 시

UNIX_TIMESTAMP() 함수에 유효 범위를 벗어난 값을 전달하면 MySQL은 0을 반환합니다. 이때 유효한 값의 범위는 TIMESTAMP 데이터 타입과 동일하며, 일반적으로 '1970-01-01 00:00:01' UTC부터 '2038-01-19 03:14:07' UTC까지입니다.

예제

mysql> Select UNIX_TIMESTAMP('1969-01-01 04:05:45');
+---------------------------------------+
| UNIX_TIMESTAMP('1969-01-01 04:05:45') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
1 row in set (0.00 sec)

위 예제에서 '1969-01-01 04:05:45'는 1970년 이전의 날짜이므로 TIMESTAMP 타입의 유효 범위를 벗어나며, 그 결과 MySQL은 0을 반환합니다.

FROM_UNIXTIME()에 범위를 벗어난 값 전달 시

반면 FROM_UNIXTIME() 함수에 유효 범위를 벗어난 값을 전달하면 MySQL은 NULL을 반환합니다. 이 함수의 유효한 값 범위는 INTEGER 데이터 타입과 동일하며, 즉 -2147483648부터 2147483647 사이의 정수여야 합니다.

예제

mysql> Select FROM_UNIXTIME(2147483648);
+---------------------------+
| FROM_UNIXTIME(2147483648) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

위 예제에서 2147483648은 INTEGER 타입이 표현할 수 있는 최대값(2147483647)을 1 초과하는 값이므로, MySQL은 NULL을 반환합니다.

정리

  • UNIX_TIMESTAMP(): TIMESTAMP 데이터 타입과 동일한 범위를 가지며, 범위를 벗어난 값이 입력되면 0을 반환합니다.
  • FROM_UNIXTIME(): INTEGER 데이터 타입과 동일한 범위를 가지며, 범위를 벗어난 값이 입력되면 NULL을 반환합니다.

두 함수의 반환 방식 차이를 기억해 두면, 쿼리 결과가 예상과 다르게 나올 때 원인을 빠르게 파악하는 데 도움이 됩니다.