2014-10-06 3 views
1

저는 많은 고객이 현재 사용하고있는 웹 응용 프로그램을 빌드했습니다. v1.0에서는 시간대를 지원하지 않고 유럽/암스테르담에 모든 datetimes를 저장했습니다. v1.2에서는 UTC로 모든 datetimes를 저장하고 사용자가 선택한 시간대에 따라 웹 앱에 올바른 날짜를 표시합니다.모든 날짜/시간 필드를 UTC로 변환

이제 phpmyadmin에서 모든 datetime 필드를 UTC로 업데이트하는 고객 (업데이트 중이며 이미 데이터가있는 사용자)에게 mysql 쿼리를 제공하고 싶습니다. CakePHP를 사용하여 모든 생성/수정 된 필드를 업데이트해야합니다. 누구든지이 쿼리의 모습을 보여줄 수 있습니까?

답변

1

당신은 MySQL을 자체에서 제공되는 시간대 변환 기능을 사용할 수 있습니다 :

-- "table" and "field" are obviously placeholders 
UPDATE table SET field = CONVERT_TZ(field, 'Europe/Amsterdam', 'UTC'); 

먼저 백업을해야합니다.

CONVERT_TZ은 MySQL에 시간대를 인식시켜야합니다. 는 시간대가있는 경우에 당신이 모르는 경우를 실행 다치게하지 않도록,

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p -D mysql 

이 할 수있는 여러 번 : 당신은 할 수있는 간단한 쉘 명령을 import them to the database은 (루트 DB를에 액세스 할 수 있어야합니다) 이미 수입되었습니다. 일반적으로 일부 불명확 한 시간대와 관련된 경고는 무시할 수 있습니다.

+0

좋습니다. 작동합니다. 감사합니다. 이벤트의 경우 start_date 및 start_time은 별도로 저장됩니다. 이 입력란에 가입하여 UTC로 변환하여 다시 한 번 쿼리에 저장할 수 있습니까? – Matish

+0

예, 작동합니다. 기본적으로'field' 자체를 사용할 수있는 곳에서는 CONVERT_TZ (field, 'Europe/Amsterdam', 'UTC') 구문을 사용할 수 있습니다. – lxg

+0

감사합니다,이 나를 위해 일했다 : 업데이트'이벤트'설정 'start_date' = CONVERT_TZ (concat ('start_date', '','start_time'), '+02 : 00', '+00 : 00') , 'end_date' = CONVERT_TZ (concat ('end_date', 'end_date', concat ('start_time '),'+02 : 00 ', ) +02 : 00 ','+02 : 00 ','+00 : 00 '), 'end_time '= CONVERT_TZ (concat ('end_date',' ','end_time') , '+00 : 00'); – Matish

관련 문제