source

MySQL의 NOW() 및 CURDATE() 함수로 UTC를 사용하려면 어떻게 해야 합니까?

factcode 2022. 9. 21. 23:24
반응형

MySQL의 NOW() 및 CURDATE() 함수로 UTC를 사용하려면 어떻게 해야 합니까?

MySQL 쿼리의 NOW()와 CURDATE()에 대한 호출이 UTC로 날짜를 반환하도록 하겠습니다.이러한 기능을 사용하는 모든 쿼리를 변경하지 않고 이 작업을 수행하려면 어떻게 해야 합니까?

드디어 내가 찾던 걸 찾았어...

my.cnf에서는

[mysqld_safe]
timezone = UTC

이 옵션을 [mysqld]아래에 두었는데 mysql이 시작되지 않았습니다.

페이지를 로드할 때마다 "SET time_zone='+0:00';"를 호출하는 것도 가능하지만, 페이지를 로드할 때마다 해당 쿼리를 호출하는 것은 좋지 않습니다.

UTC_TIMESTAMP()

현재 UTC 날짜와 시간을 'YYY-MM-DD hh:mm:ss' 또는 YYYYMMDDhhhmmss의 값으로 반환합니다.uuuuu 형식(함수가 문자열 또는 숫자 컨텍스트에서 사용되는지 여부에 따라 달라집니다).

UTC_DATE()

함수가 문자열 또는 숫자 컨텍스트에서 사용되는지에 따라 현재 UTC 날짜를 'YYY-MM-DD' 또는 YYYYMDD 형식의 값으로 반환합니다.

UTC_TIME()

현재 UTC 시간을 'hh:mm:ss' 또는 hhmmss의 값으로 반환합니다.uuuuu 형식(함수가 문자열 또는 숫자 컨텍스트에서 사용되는지 여부에 따라 달라집니다).

MySQL 레퍼런스: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_utc-timestamp

서버의 시계를 UTC로 설정합니다.아니, 정말입니다.

할 수 있으면 해라.

가장 큰 골칫거리 중 하나는 로컬 타임존에서 실행되는 "cron" 작업 등입니다.즉, 일부 cron 작업은 1년에 한 번 놓치고 나머지는 모두 GMT로 반년 동안 다른 시간에 실행됩니다(여기에서는 서머타임이 있는 시간대에 있는 것으로 가정합니다).

MySQL은 표준 시간대를 지원하지만 엉망진창입니다.필요없으면 쓰지 마세요.서버의 클럭을 UTC로 설정하기만 하면 시간은 정상적으로 동작합니다.

서버 클럭을 변경하는 것은 관리 대상 시스템의 큰 변화이며, 영향을 받을 가능성이 있는 서버나 서비스가 다수 존재할 가능성이 있습니다만, 어쨌든 그렇게 해 주세요.QA 작업이 중요할 수 있지만 시도해 보십시오.

/etc/mysql/my.cnf 파일을 가져와 [mysqld]섹션 아래 행에 추가합니다.

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

그런 다음 mysql을 재시작합니다.여기서 curtime()을 선택하면 GMT 시간이 표시됩니다.

실행 중인 실가동 서버의 타임존을 변경하거나 키 설정을 갱신하고 mysql을 재시작하는 것이 비현실적이거나 오버킬이라고 생각될 경우 다음을 시도해 보십시오.

CONVERT_TZ(NOW(), 'US/Pacific', 'UTC')

서 ★★★★★US/Pacific의 타임존입니까?NOW()콜이 시간을 되돌리고 있습니다.

적절한 방법은 MarkR이 말한 대로 서버의 시간대를 UTC로 변경하는 것입니다.

그러나 SET time_zone을 사용하여 현재 세션의 시간대를 변경할 수도 있습니다.

매뉴얼:

현재 세션 시간대 설정은 존에 민감한 시간 값의 표시 및 저장에 영향을 미칩니다.여기에는 NOW()나 CURTIME() 등의 함수에 의해 표시되는 값이 포함됩니다.

SET TIMESTAMP 문을 사용하여 날짜/시간 결과의 형식을 원하는 형식으로 지정해야 합니다.이는 모든 쿼리를 변경하는 것을 의미합니다.단, sysdate()는 이를 따르지 않습니다.

언급URL : https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc

반응형