10.6.2 시간대 윤초 지원
윤초 값은 :59:59
에서 끝나는 시간 부분을 사용하여 반환됩니다. 이것은 NOW()
등의 함수가 윤초 동안 2-3 초 연속해서 같은 값을 반환 할 수 있다는 것을 의미합니다. :59:60
또는 :59:61
에서 끝나는 시간 부분을 가진 리터럴 시간 값이 무효로 간주되는 것에는 변함이 없습니다.
윤초의 1 초 전 TIMESTAMP
값을 검색 할 필요가있는 경우 'YYYY-MM-DD hh:mm:ss'
값의 비교를 사용하면 비정상적인 결과를 얻을 수 있습니다. 이 점에 대해 다음 예에서 설명합니다. 현지 시간대를 UTC로 변경하므로 내부 값 (UTC에서의 값)으로 표시 값 (시간대 수정이 적용된 값)의 차이가 없습니다.
mysql>CREATE TABLE t1 (
->a INT,
->ts TIMESTAMP DEFAULT NOW(),
->PRIMARY KEY (ts)
->);
Query OK, 0 rows affected (0.01 sec) mysql>-- change to UTC
mysql>SET time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec) mysql>-- Simulate NOW() = '2008-12-31 23:59:59'
mysql>SET timestamp = 1230767999;
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO t1 (a) VALUES (1);
Query OK, 1 row affected (0.00 sec) mysql>-- Simulate NOW() = '2008-12-31 23:59:60'
mysql>SET timestamp = 1230768000;
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO t1 (a) VALUES (2);
Query OK, 1 row affected (0.00 sec) mysql>-- values differ internally but display the same
mysql>SELECT a, ts, UNIX_TIMESTAMP(ts) FROM t1;
+------+---------------------+--------------------+ | a | ts | UNIX_TIMESTAMP(ts) | +------+---------------------+--------------------+ | 1 | 2008-12-31 23:59:59 | 1230767999 | | 2 | 2008-12-31 23:59:59 | 1230768000 | +------+---------------------+--------------------+ 2 rows in set (0.00 sec) mysql>-- only the non-leap value matches
mysql>SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:59';
+------+---------------------+ | a | ts | +------+---------------------+ | 1 | 2008-12-31 23:59:59 | +------+---------------------+ 1 row in set (0.00 sec) mysql>-- the leap value with seconds=60 is invalid
mysql>SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:60';
Empty set, 2 warnings (0.00 sec)
이 문제를 해결하려면 윤초의 수정이 적용되어 실제로 컬럼에 저장되어있는 UTC 값에 따라 비교를 사용합니다.
mysql>-- selecting using UNIX_TIMESTAMP value return leap value
mysql>SELECT * FROM t1 WHERE UNIX_TIMESTAMP(ts) = 1230768000;
+------+---------------------+ | a | ts | +------+---------------------+ | 2 | 2008-12-31 23:59:59 | +------+---------------------+ 1 row in set (0.00 sec)