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 UTCmysql>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 samemysql>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 matchesmysql>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 invalidmysql>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 valuemysql>SELECT * FROM t1 WHERE UNIX_TIMESTAMP(ts) = 1230768000;+------+---------------------+ | a | ts | +------+---------------------+ | 2 | 2008-12-31 23:59:59 | +------+---------------------+ 1 row in set (0.00 sec)