10.6.1 시간대 변경에 의한 현재의 시간 유지
전술 한 바와 같이, 시간대 규칙이 변경하면 이전 규칙을 사용하는 응용 프로그램이 구식입니다. 현재 시간에 유지하려면 시스템이 현재 표준 시간대 정보를 사용하고 있는지 확인해야합니다. MySQL의 경우 현재의 시간에 유지하기 위해 고려해야 할 두 가지 요소가 있습니다.
운영 체제의 시간은 그 시간대가
SYSTEM
으로 설정되어있는 경우 MySQL Server가 시간에 사용하는 값에 영향을줍니다. 운영 체제가 최신 표준 시간대 정보를 사용하고 있는지 확인합니다. 대부분의 운영 체제에서는 최신 업데이트 또는 서비스 팩을 통해 시스템 시간 변경에 대응할 수 있습니다. 시간의 변화에 대처 한 업데이트 내용은 운영 체제 공급 업체의 Web 사이트를 확인하십시오.시스템의
/etc/localtime
시간대 파일을 mysqld를 시작할 때 유효한 것과 다른 규칙을 사용하는 버전으로 대체하면 업데이트 된 규칙을 사용하도록 mysqld를 다시 시작해야합니다. 그렇지 않으면 시스템이 시간을 변경했을 때 mysqld가 인식되지 않을 수 있습니다.MySQL에서 명명 된 시간대를 사용하는 경우
mysql
데이터베이스의 시간대 테이블이 최신 상태인지 확인합니다. 시스템 자체 zoneinfo 데이터베이스가있는 경우는 zoneinfo 데이터베이스를 업데이트 할 때마다이 섹션의 앞부분에서 설명한 단계를 사용하여 MySQL 시간대 테이블을 다시로드해야합니다. 시스템 자체 zoneinfo 데이터베이스가없는 경우, MySQL Developer Zone에서 업데이트가 있는지 확인합니다. 새로운 업데이트가 사용 가능한 경우이를 다운로드하여 사용하여 현재 시간대 테이블을 바꿉니다. mysqld는 검색 시간대 정보를 캐시하기 때문에 시간대 테이블을 대체 한 후에는 mysqld를 재시작하여 오래된 시간대 데이터를 제공하고 않도록해야합니다.
서버의 타임 존 설정으로 사용하거나 자신의 시간대를 설정하는 클라이언트가 사용하는 명명 된 시간대가 사용할 수 있는지 확실하지 않은 경우는 시간대 테이블이 비어 있는지 확인하십시오. 다음 쿼리는 시간대 이름을 포함하는 테이블에 행이 있는지 여부를 판단합니다.
mysql> SELECT COUNT(*) FROM mysql.time_zone_name;
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
카운트가 제로의 경우 테이블이 비어 있는지를 나타냅니다. 이 경우 명명 된 시간대를 사용할 수 없으며 테이블을 업데이트 할 필요가 없습니다. 카운트가 제로보다 큰 경우, 테이블은 비어 있지 않고 그 내용이 명명 된 시간대의 지원에 사용할 수 있음을 나타냅니다. 이 경우 명명 된 시간대를 사용하는 사용자가 올바른 쿼리 결과를 얻을 수 있도록 반드시 시간대 테이블을 다시로드하십시오.
일광 절약 시간 규칙 변경에 MySQL 설치가 제대로 업데이트되었는지 여부를 확인하려면 다음과 같은 테스트를 사용합니다. 이 예에서는 3 월 11 일 오전 2시 미국에서 열리는 2007 년 DST의 1 시간의 변화에 적절한 값을 사용하고 있습니다.
테스트는 다음 두 개의 쿼리를 사용합니다.
SELECT CONVERT_TZ ( '2007-03-11 2:00:00', 'US / Eastern', 'US / Central'); SELECT CONVERT_TZ ( '2007-03-11 3:00:00', 'US / Eastern', 'US / Central');
두 시간 값은 DST 변경되는 시간을 나타 명명 된 시간대의 사용은 시간대 테이블을 사용할 필요가 있습니다. 결과는 두 쿼리에서 동일한 결과가 반환 될 것으로 기대됩니다 ( 「미국 / 중앙 "시간대 동등한 값으로 변환 된 입력 시간).
시간대 테이블을 업데이트하기 전에 다음과 같은 잘못된 결과가 표시됩니다.
mysql>SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+ | CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') | +------------------------------------------------------------+ | 2007-03-11 01:00:00 | +------------------------------------------------------------+ mysql>SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+ | CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central') | +------------------------------------------------------------+ | 2007-03-11 02:00:00 | +------------------------------------------------------------+
테이블 업데이트 후 올바른 결과가 표시됩니다.
mysql>SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+ | CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') | +------------------------------------------------------------+ | 2007-03-11 01:00:00 | +------------------------------------------------------------+ mysql>SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+ | CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central') | +------------------------------------------------------------+ | 2007-03-11 01:00:00 | +------------------------------------------------------------+