[mysql] MySQL의 현재 시간대는 어떻게 얻습니까?

MySQL에 그러한 기능이 있는지 아는 사람이 있습니까?

최신 정보

유효한 정보가 출력되지 않습니다 :

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+

또는 MySQL 자체가 정확히 time_zone사용 된 것을 알 수없는 경우도 PHP있습니다 SYSTEM.



답변

매뉴얼에서 ( 섹션 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를 수행하지 않음)에 저장하고 필요에 따라 원하는 시간대로 변환하십시오.


답변

아래 쿼리는 현재 세션의 시간대를 반환합니다.

select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));


답변

간단히
SELECT @@system_time_zone;

반환 PST(또는 시스템과 관련된 모든 것).

세션 시간대를 결정하려는 경우 다음 쿼리를 사용할 수 있습니다.
SELECT IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone);

시스템 시간대와 다른 경우 세션 시간대를 반환합니다.


답변

으로 자쿱 브라 나 (작성자 또는 AdminerNotORM가 ) 코멘트에 언급, 현재의 오프셋 (offset) 시간대 선택 TIME사용 :

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

02:00:00시간대가 해당 날짜의 +2 : 00 인 경우 반환됩니다.

여기에 치트 시트를 만들었습니다 : MySQL의 시간대를 UTC로 설정해야합니까?


답변

mysql의 현재 시간대를 얻으려면 다음을 수행하십시오.

 1. SELECT @@system_time_zone;   //from this you can get the system timezone
 2. SELECT IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone) //This will give you time zone if system timezone is different from global timezone

이제 mysql 시간대를 변경하려면 다음을 수행하십시오.

 1. SET GLOBAL time_zone = '+00:00'   //this will set mysql timezone in UTC
 2. SET @@session.time_zone = "+00:00";  //by this you can chnage the timezone only for your particular session 


답변

SELECT EXTRACT(HOUR FROM (TIMEDIFF(NOW(), UTC_TIMESTAMP))) AS `timezone`

이렇게하면 시간대가 정수 (예 :)로 반환되어 -6양수 또는 음수 시간을 처리합니다 (여기서 실행되는 위치 EXTRACT: HOUR함수만으로는 음수 시간대를 양수로 반환 함).


답변

누구든지 mysql db의 시간대를 찾게됩니다.

이 쿼리를 사용하면 현재 시간대를 얻을 수 있습니다.

mysql> SELECT @@system_time_zone as tz;
+-------+
|  tz   |
+-------+
|  CET  |
+-------+