9Cells

Laravel timezone

MySQL의 timezone 조회

다음 쿼리로 조회가 가능하다.

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

이 결과가 SYSTEM으로 나오면 SYSTEM의 timezone 설정을 따른다는 의미.

SYSTEM의 timezone이 어떻게 설정되어 있는지 얻으려면 다음 쿼리로 조회 가능하다.

SELECT IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone);
MySQL의 timezone은 설정 시점

MySQL의 timezone은 서버가 시작될 때 설정된다고 한다.

When the server starts, it attempts to determine the time zone of the host machine automatically and uses it to set the system_time_zone system variable. The value does not change thereafter. -- https://dev.mysql.com/doc/mysql-g11n-excerpt/5.7/en/time-zone-support.html

timezone에 따른 시간 표현

MySQL이 설치된 우분투의 timezone이 UTC인 상태에서 2020-06-19 01:03:47 이였던 레코드를 Asia/Seoul로 바꾸고 다시 조회하면 2020-06-19 10:03:47 로 보여진다.

즉, 시스템이 어떤 timezone이건 시각을 기록해두면 다른 timezone의 DB로 이전해도 원래 시각을 알 수 있다. 이전 할 때 timezone 설정이 중요할듯.

Laravel에서 Carbon의 timezone

Laravel의 app.timezone을 'Asia/Seoul'로 바꾸면 Carbon::make()->timezone 또한 Asia/Seoul로 바뀐다. Config가 읽히기 전 위치에서 Carbon timezone을 출력하면 Asia/Seoul로 설정되어 있더라도 UTC로 나온다.