Mysql FROM_UNIXTIME as UTC
어떻게 하면 될까요?
FROM_UNIXTIME
UTC/GMT로 Mysql에 저장됩니까?날짜는 연결의 표준 시간대에 반환됩니다.
연결 시간대를 변경하고 싶지 않습니다.
시간대를 미리 설정하는 것이 좋습니다.
SET time_zone='UTC';
select FROM_UNIXTIME(1277942400);
그 이유는 지역 시간대와 관련된 변환은 손실이 될 수 있기 때문입니다.여기 문서에 이러한 예가 있습니다(아래 4번째 단락 참조).UNIX_TIMESTAMP()
"참고:"로 시작하는 섹션
나의 해결책은
SELECT CONVERT_TZ(FROM_UNIXTIME(1277942400), @@session.time_zone,'UTC')
if 변환_TZ가 null을 반환합니다. mysql의 시간대 테이블이 채워졌는지 확인하십시오.
zypper install mysql-community-server-tools
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
답변이 끝났다는 것을 알지만 그래도 다음과 같이 기여하고 싶습니다.
서버가 다음과 같은 기능을 가진 UTC 시간대를 생성하지 않으려면 다음과 같이 하십시오.NOW()
그리고.FROM_UNIXTIME()
등, 당신은 설정해야 합니다.time_zone
@맷 존슨이 말한 것처럼.
그가 언급하지 않은 것이 있습니다.SET time_zone = timezone;
현재 연결의 표준 시간대만 설정합니다.SET GLOBAL time_zone = '+00:00'
UTC 기반 날짜를 저장할 때마다 시간대를 설정할 필요가 없도록 이러한 함수를 기본적으로 UTC로 반환/변환하려면 다음과 같이 하십시오.
현재 time_zone 설정을 확인합니다.SELECT @@global.time_zone, @@session.time_zone;
MySQL :: MySQL 5.5 참조 매뉴얼 :: 10.6 MySQL 서버 표준 시간대 지원
세션의* 시간대를 제어할 수 없는 경우,from_unixtime
,now
,current_date
, 등은 근본적으로 파손되어 있으므로 피해야 합니다.다행히 날짜 산술은 세션 시간대를 완전히 무시하므로 간단히 다음 작업을 수행할 수 있습니다.
select '1970-01-01' + interval 1277942400 second
또는 그에 상당하는
select date_add('1970-01-01', interval 1277942400 second)
* 어려울 수도 있습니다. 일부 클라이언트는 환경에 따라 세션 시간대를 "도움을 주며" 설정합니다. 다른 클라이언트는 자동으로 삭제된 연결을 다시 설정하므로 연결할 때에만 시간대 설정에 의존할 수 없으며 모든 문장으로 설정해야 합니다.
에.now()
/current_date()
,사용하다utc_timestamp()
/date(utc_timestamp())
(원하는 경우 convert_tz를 사용하여 일부 시간대로 conver)
만약 당신이 나처럼 게으르고 글로벌 세션 시간대 변수를 변경하고 싶지 않다면(다른 서버로 moved하는 것, 거기서 변경하는 것을 잊어버리고 홉하는 것, 당신은 문제가 있습니다), 세션 변수(db와 홉으로 자동 연결하는 일부 모듈을 사용함,연결 시 발행된 변수가 사라짐) 및 시간대를 로드하고 싶지 않으면 도움이 될 것 같습니다 :).
select
now() as timezoned,
date_add(
FROM_UNIXTIME(0), interval
unix_timestamp()+TIMESTAMPDIFF(SECOND,NOW(),UTC_TIMESTAMP()) SECOND
) as utc
부정적인 타임스탬프를 사용해도 작동할 것입니다.특정 열을 변환해야 할 경우, unix_timestamp()를 타임스탬프가 포함된 열로 대체하면 됩니다.
보너스로, 열이 unix_timestamp(예: "utc")에 있는 동안 datetime과 now의 차이를 찾아야 할 경우 TIMESTAMPdiff(SECOND, ..., NOW())로 랩핑하면 날짜가 저장됩니다.
업데이트: 만약 당신이 시간 절약이 있는 지역에 살고 있고 당신의 시간이 급증한다면, 여기에 내가 생각해낸 것이 있는데, 이것은 훨씬 더 간단한 것입니다.
from_unixtime(1277942400)을 시간대로 선택하고 date_add('1970-01-01 00:00', 간격 1277942400 second)를 utc로 선택합니다.
훨씬 간단합니다 :).
별로 좋지 않은 대안.
from_unixtime(1277942400)을 시간대로 선택, date_add(FROM_UNIXTIME(0)), 간격 1277942400+(UNIX_TIMESTamp('1970-1-2')-UNIX_TIMESTamp(0)-24*3600) Second)를 utc로 선택합니다.
언급URL : https://stackoverflow.com/questions/18276768/mysql-from-unixtime-as-utc
'programing' 카테고리의 다른 글
"디스플레이: 테이블 셀;"이 있는 디브가 마진의 영향을 받지 않는 이유는 무엇입니까? (0) | 2023.11.05 |
---|---|
objdump가 -S 옵션으로 소스 코드를 표시하는 방법은 무엇입니까? (0) | 2023.11.05 |
VB.net : SSL을 사용하도록 설정한 상태에서 mysql( mariadb)에 연결할 수 없습니다. (0) | 2023.10.31 |
AJAX jQuery.load 대 jQuery.get (0) | 2023.10.31 |
setInterval 및 clear를 사용하려면 어떻게 해야 합니까?간격? (0) | 2023.10.31 |