2011-12-04 3 views
2
SELECT * , unix_timestamp(NOW()) - unix_timestamp(created) AS timedif FROM is_meeting_comments WHERE meeting_id_fk=9 

이 쿼리는 레코드가 생성 된 시간 (CURRENT TIMESTAMP)과 선택 쿼리가 실행될 때의 시간 차이를 확인하는 데 사용됩니다.mysql에서 음수 시간차

이 쿼리는 원격 PC의 반환 음수 값입니다. 로컬 서버에서 처음 테스트했을 때이 문제는 분명하지 않습니다. 다른 시간대가 설정 되었기 때문입니까? 그러나이 문제는 어떻게 될 것인가? PC가 서버 끝에서 계산되기 때문에 시간은 모든 PC에 관계없이 동일해야합니다.

enter image description here

이유는 음의 값이 발생하는?

+0

@Chris가 당신을 올바른 방향으로 가리키고 있습니다. 게다가 datetime 대신 생성 된 컬럼에 timestamp 데이터 유형을 사용할 수도 있습니다. – Eddy

+0

@eddy 이미 timestamp 데이터 유형을 사용 중입니다. – SupaOden

답변

2

시간대 차이로 인해 음수 일 수 있습니다. unix_timestamp 함수는 인수가 로컬 시간대에 있다고 가정하므로 변환 프로세스의 일부로 UTC로 변환합니다. "만든"이 다른 시간대의 PC (또는 다른 시간대가 구성된 시간대)에 로컬 시간 (비 UTF)으로 저장된 경우 다른 시간대의 시스템에서 다시 읽을 때 변환이 꺼질 수 있습니다.

MYSQL은 연결 당 시간대를 허용하도록 구성 할 수 있습니다. 따라서 시간대는 데이터베이스 서버의 시간대가 아닌 사용자의 시간대이므로 날짜 저장 방법에 영향을 줄 수 있습니다. 자세한 내용은 this 페이지를 확인하십시오.