2013-08-13 36 views
21

jestem próby załadowania strefy czasowe do mojego instancji MySQL (który jest uruchomiony na Unbuntu), aby można było korzystać z funkcji CONVERT_TZ ale po uruchomieniu poniższego polecenia:Nie można załadować stref czasowych?

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

uzyskać następujące dane wyjściowe i kiedy spróbuj użyć CONVERT_TZ po prostu zwraca NULL nadal:

Ostrzeżenie: nie można załadować '/ usr/share/zoneinfo/Asia/Riyadh87' jako czasu strefie . Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/Asia/Riyadh88" jako strefy czasowej. Pomijam to. Ostrzeżenie: Nie można załadować strefy "/ usr/share/zoneinfo/Asia/Riyadh89" jako strefy czasowej . Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/Mideast/Riyadh87" jako strefy czasowej. Pomijam to. Ostrzeżenie: Nie można załadować strefy "/ usr/share/zoneinfo/Mideast/Riyadh88" jako strefy czasowej . Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/Mideast/Riyadh89" jako strefy czasowej. Pomijam to. Ostrzeżenie: Nie można załadować strefy "/usr/share/zoneinfo/iso3166.tab" jako strefy czasowej . Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/posix/Asia/Riyadh87" jako strefy czasowej. Pomijam to. Ostrzeżenie: Nie można załadować strefy "/ usr/share/zoneinfo/posix/Asia/Riyadh88" jako strefy czasowej . Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/posix/Asia/Riyadh89" jako strefy czasowej. Pomijam to. Ostrzeżenie: Nie można załadować strefy "/ usr/share/zoneinfo/posix/Mideast/Riyadh87" jako strefy czasowej. Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/posix/Mideast/Riyadh88" jako strefy czasowej. Pomijanie go. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/posix/Mideast/Riyadh89" jako strefy czasowej. Pomijanie go. Ostrzeżenie: nie można załadować strefy "/ usr/share/zoneinfo/right/Asia/Riyadh87" jako strefy czasowej. Pomijam to. Ostrzeżenie: nie można załadować '/ usr/share/zoneinfo/right/Asia/Riyadh88' jako strefy czasowej. Pomijam to. Ostrzeżenie: Nie można załadować strefy "/ usr/share/zoneinfo/right/Asia/Riyadh89" jako strefy czasowej . Pomijam to. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/right/Mideast/Riyadh87" jako strefy czasowej. Pomijanie go. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/right/Mideast/Riyadh88" jako strefy czasowej. Pomijanie go. Ostrzeżenie: nie można załadować "/ usr/share/zoneinfo/right/Mideast/Riyadh89" jako strefy czasowej. Pomijanie go. Ostrzeżenie: nie można załadować strefy "/usr/share/zoneinfo/zone.tab" jako strefy czasowej . Pomijam to.

Czy ktoś ma pomysł, dlaczego tak się dzieje?

PS:

Używam następujący sposób przekonwertować datetimes:

CONVERT_TZ(NOW(),'UTC', 'PCT') 

to możliwe, że mam tylko konwersja nieprawidłowo i to jest przyczyną zerowej wyniki?

+0

Pierwsze polecenie w twoim potoku, ten skrypt 'mysql_tzinfo_to_sql', emituje duży, brzydki plik .sql, jeśli nie przekierujesz go prosto do' mysql'. Jak wygląda ten plik? Czy potrzebujesz historycznych danych strefy czasowej w Arabii Saudyjskiej? –

+0

Nie, zasadniczo będę konwertować tylko z UTC na PST. Zgaduję, że nie chcesz, żebym opublikował cały wielki, brzydki skrypt SQL. Czy jest coś konkretnego, czego powinienem szukać w pliku .sql? –

Odpowiedz

23

Jest to błąd z plikami strefy czasowej dla Riyadh * Na Debianie:

http://bugs.mysql.com/bug.php?id=20545

Zalecanym rozwiązaniem jest po prostu zignorować ostrzeżenia (jeśli nie potrzebujesz tych czasową oczywiście):

mysql_tzinfo_to_sql /usr/share/lib/zoneinfo | mysql -uroot --force mysql 

Po zaimportowaniu danych TZ za pomocą opcji --force możliwe będzie użycie CONVERT_TZ. Oto transkrypcja tego, co właśnie zrobiłem:

sh$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p mysql --force 2> /dev/null 
Enter password: ******** 
sh$ mysql -p 
Enter password: ******** 
Server version: 5.1.49-3 (Debian) 

mysql> select convert_tz(now(), 'UTC', 'CET'); 
+---------------------------------+ 
| convert_tz(now(), 'UTC', 'CET') | 
+---------------------------------+ 
| 2013-08-13 21:04:34    | 
+---------------------------------+ 
1 row in set (0.00 sec) 
+1

Dzięki za informacje. Wygląda na to, że mam wszystko, co potrzebne do zainstalowania, ale otrzymuję wartość null, ponieważ konwertowałem na 'PST' zamiast' PST8PDT' ... –

+3

@AbeMiessler: D W przypadku wątpliwości dotyczących nazwy TZ, mógłbyś zapytać 'mysql. time_zone_name' dla szybkiego sprawdzenia. Jeśli Twój konkretny przypadek: 'wybierz nazwę z mysql.time_zone_name gdzie nazwa taka jak"% PST% ";' –

1

Niestety, rozwiązanie Sylvaina nie sprawdziło się u mnie.

Udało mi się zapełnić tabele strefy czasowej naszego serwera produkcyjnego, eksportując tabele z PHPMyAdmin mojego komputera programistycznego (w systemie Windows) i nieco ulepszając skrypt tworzenia.

Ponieważ skrypt jest zbyt długi, aby można go było udostępnić we wpisie, udostępnię go na moim Dysku Google.

skrypt instalacyjny (z nowymi liniami i komentarze oddzielana):

https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing

skrypt z komentarzem:

https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing

Upewnij się, aby korzystać z wersji bez uwag. Wersja komentarza trwa około 5 minut i kończy się niepowodzeniem z jakiegoś powodu, podczas gdy pozbawiona wersji wersja trwa mniej niż 5 sekund.

Uwaga: Aby to zadziałało, prawdopodobnie będziesz musiał działać jako root.

Powiązane problemy