[mysql] MySQL의 시간대를 어떻게 설정합니까?

한 서버에서 내가 실행할 때 :

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)

다른 서버에서 :

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)



답변

나는 이것이 유용 할 것이라고 생각했다.

MySQL에서 시간대를 설정할 수있는 위치는 세 곳입니다.

[mysqld] 섹션의 “my.cnf”파일에서

default-time-zone='+00:00'

@@ global.time_zone 변수

어떤 값으로 설정되어 있는지 확인하려면 :

SELECT @@global.time_zone;

값을 설정하려면 다음 중 하나를 사용하십시오.

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

‘유럽 / 헬싱키’와 같은 명명 된 시간대를 사용하면 시간대 표를 올바르게 채워야합니다.

+02:00오프셋 임을 명심하십시오 . Europe/Berlin시간대 (두 오프셋이 있음)이고CEST 특정 오프셋에 해당하는 클럭 시간입니다.

@@ session.time_zone 변수

SELECT @@session.time_zone;

설정하려면 다음 중 하나를 사용하십시오.

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

둘 다 SYSTEM을 리턴 할 수 있습니다. 이는 my.cnf에 설정된 시간대를 사용함을 의미합니다.

시간대 이름이 작동하려면 시간대 정보 테이블을 채우도록 설정해야합니다 ( http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html) . 또한 이 답변 에서 해당 테이블을 채우는 방법에 대해서도 언급합니다 .

현재 시간대 오프셋을 다음과 같이 얻으려면 TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

시간대가 +2 : 00이면 02:00:00을 반환합니다.

현재 UNIX 타임 스탬프를 얻으려면

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

타임 스탬프 열을 UNIX 타임 스탬프로 가져 오려면

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

UTC 날짜 / 시간 열을 UNIX 타임 스탬프로 가져 오려면

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

참고 : 시간대 를 변경해도 저장된 날짜 시간 또는 타임 스탬프는 변경되지 않습니다. 않지만 기존 타임 스탬프 열은 내부적으로 UTC 타임 스탬프로 저장되고 현재 MySQL 시간대에 외부로 표시되므로 기존 타임 스탬프 열에 대해 다른 날짜 시간을 표시합니다.

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


답변

여전히이 문제가있는 사람 :

value="jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC"

나를 위해 일했다. ?serverTimezone=UTC끝에 추가 하십시오.


답변

MySQL 또는 PHP 용 시간대 서버를 구성 할 수있는 경우 :

생각해 내다:

  1. 시간대 시스템을 변경하십시오. 우분투의 예 :

    $ sudo dpkg-reconfigure tzdata
  2. 서버를 다시 시작하거나 Apache 2 및 MySQL을 다시 시작할 수 있습니다.

    /etc/init.d/mysql restart

답변

현재 세션에 설정하려면 다음을 수행하십시오.

SET time_zone = timezonename;


답변

MySQL 서버에서 간단히 실행하십시오.

SET GLOBAL time_zone = '+8:00';

시간대는 +8 : 00입니다.


답변

이것은 인도의 한 위치에서 나를 위해 일합니다.

SET GLOBAL time_zone = "Asia/Calcutta";
SET time_zone = "+05:30";
SET @@session.time_zone = "+05:30";


답변

서버를 시작할 때 서버의 기본 시간대를 지정할 수 있습니다 . http://dev.mysql.com/doc/refman/5.1/en/server-options.html 및 특히 --default-time-zone=timezone옵션을 참조 하십시오 . 당신은 글로벌 및 세션 시간대를 확인할 수 있습니다

SELECT @@global.time_zone, @@session.time_zone;

다음 SET문장으로 설정하십시오 . & c; 자세한 내용 은 http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html 을 참조 하십시오 .