매뉴얼에서 ( 섹션 9.6 ) :
글로벌 및 클라이언트 특정 시간대의 현재 값은 다음과 같이 검색 할 수 있습니다.
mysql> SELECT @@global.time_zone, @@session.time_zone;
편집 는 반환 위 SYSTEM
의 MySQL은 도움보다 작은 시스템의 시간대에 슬레이브로 설정되어있는 경우. 당신이 PHP를 사용하고 있기 때문에 MySQL의에서 대답이 경우 SYSTEM
, 당신은 어떤 시간대 시스템 요청할 수 있습니다 그것의 를 통해 사용하여 date_default_timezone_get
. VolkerK 지적으로 (물론, PHP가 다른 서버에서 실행 될 수 있지만 가정이가는대로, 웹 서버하고있다하는 얘기 DB 서버 가정 으로 설정을 [경우 실제로 에서 ] 같은 시간대가 아닌 거대한 도약.)하지만 MySQL의에로 (즉, 조심은), 당신은 PHP가 사용하는 (시간대를 설정할 수 있습니다date_default_timezone_set
)는 OS가 사용중인 것과 다른 값을보고 할 수 있음을 의미합니다. PHP 코드를 제어하고 있다면, 그 작업을 수행하고 있는지 잘 알고 있어야합니다.
그러나 MySQL 서버가 어떤 시간대를 사용하는지에 대한 모든 질문은 서버에 어떤 시간대가 있는지 묻는 것이 데이터베이스의 데이터에 대해 전혀 아무것도 알려주지 않기 때문에 접할 수 있습니다 . 자세한 내용을 읽으십시오 :
추가 토론 :
물론 서버를 제어하는 경우 시간대가 알려진 수량인지 확인할 수 있습니다. 서버를 제어하지 않는 경우 다음 과 같이 연결에 사용되는 시간대를 설정할 수 있습니다 .
set time_zone = '+00:00';
그러면 시간대가 GMT로 설정되어 추가 작업 (예 now()
:)이 GMT를 사용합니다.
그러나 시간 및 날짜 값은 MySQL의 시간대 정보와 함께 저장 되지 않습니다 .
mysql> create table foo (tstamp datetime) Engine=MyISAM;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into foo (tstamp) values (now());
Query OK, 1 row affected (0.00 sec)
mysql> set time_zone = '+01:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+02:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 | <== Note, no change!
+---------------------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 10:32:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 08:32:38 | <== Note, it changed!
+---------------------+
1 row in set (0.00 sec)
서버의 시간대를 아는 것이, 지금 시간을 얻을 기능의 측면에서만 중요하다 그래서 같은 now()
, unix_timestamp()
등; 데이터베이스 데이터의 날짜가 사용하는 시간대에 대해서는 아무 것도 알려주지 않습니다. 당신이 선택할 수있는 가정 들은 서버의 시간대를 사용하여 작성되었지만, 그 가정은 물론 결함이 될 수 있습니다. 데이터에 저장된 날짜 또는 시간의 시간대를 알려면 시간대 정보와 함께 시간대를 저장하거나 항상 GMT에 있는지 확인해야합니다.
서버 시간대를 사용하여 데이터를 작성했다고 가정하는 이유는 무엇입니까? 우선, 다른 시간대를 설정하는 연결을 사용하여 데이터를 썼을 수도 있습니다. 데이터베이스가 한 서버에서 다른 서버로 이동했을 수 있습니다. 서버는 서로 다른 시간대에있었습니다. (텍사스에서 캘리포니아로 이동 한 데이터베이스를 상속 받았을 때 데이터베이스에 접속했습니다). 그러나 데이터가 현재 시간대로 서버에 기록 되더라도 여전히 모호합니다. 작년 미국에서는 일광 절약 시간 제가 11 월 1 일 오전 2시에 꺼졌습니다. 태평양 시간대를 사용하여 내 서버가 캘리포니아에 있고 값이 있다고 가정합니다.2009-11-01 01:30:00
데이터베이스에서. 언제 였어? 1 월 30 일 (PDT) 오전 11시 1 분 또는 PST (1 시간 후) 오전 1시 30 분입니까? 당신은 전혀 알 방법이 없습니다. 도덕적 : 항상 날짜 / 시간을 GMT (DST를 수행하지 않음)에 저장하고 필요에 따라 원하는 시간대로 변환하십시오.