Wiem, że to brzmi głupio, ale kiedy używam
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
wyprowadza NULL. Używam MySQL Workbench w Ubuntu 12.04 64 bit i działa na moim innym laptopie / systemie operacyjnym (również używając MySQL Workbench).
mysql
ubuntu-12.04
convert-tz
mohur
źródło
źródło
Znalazłem ten wątek po tym, jak spędziłem trochę czasu próbując dowiedzieć się, dlaczego po uruchomieniu polecenia w zaakceptowanej odpowiedzi (która jest taka sama na stronie deweloperów MySQL) polecenie nie było w stanie dokonać konwersji między strefami czasowymi, takimi jak
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Okazuje się, że na OS X są dwa pliki, które powodują problemy:
/usr/share/zoneinfo/Factory
i/usr/share/zoneinfo/+VERSION
.Poprawka ... tymczasowe przeniesienie tych plików do innej lokalizacji, na przykład
/usr/share/zoneinfo/.bak/
zezwala na polecenieaby w pełni wypełnić wszystkie oczekiwane informacje o strefie czasowej.
Może to być błąd w mojej zainstalowanej wersji MySQL lub nie:
$ mysql --version mysql Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using EditLine wrapper
Działam również w
STRICT_MODE
.W każdym razie mam nadzieję, że zaoszczędzi to kilku kłopotów każdemu, kto szuka poprawki.
źródło
Oprócz środowiska Windows możesz ustawić strefę czasową za pomocą
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
W środowisku Windows
1. download Time zone description tables from
http://dev.mysql.com/downloads/timezones.html2. Stop MySQL server
3. Put then inside Mysql installation package
(tj. C: \ Program Files \ MySQL \ data \ mysql) `4. Start MySQL server
.. Twoja praca jest zakończona.
Jeśli nadal otrzymujesz
NULL
zaCONVERT_TZ
Pobierz te tabele bazy danych i wstaw je do bazy danych mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.htmlTeraz twój problem zostanie rozwiązany .. :)
źródło
Jeśli używasz MySql w systemie Windows, musisz załadować dane strefy czasowej do schematu mysql. Oto dobre HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
Jeśli tego nie zrobisz, funkcja CONVERT_TZ nie rozpozna Twojej strefy czasowej (np. „UTC”, „Azja / Dżakarta”) i zwróci po prostu NULL.
źródło
MAMP PRO
Terminal
cd /usr/share/zoneinfo/
sudo mv +VERSION ~/Desktop
cd /applications/MAMP/Library/bin
sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/
źródło
1) W systemie Windows nie ma teraz żadnego folderu danych,
C:\Program Files\MySQL\
jak w innych odpowiedziach.2) W takim przypadku poszukaj
C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql
. Ogólnie ten folder jest ukryty iC:\ProgramData\
czasami nie zobaczysz .3) Zmień ustawienia na karcie Widok, aby zobaczyć ukryte pliki i foldery, jak wyjaśniono tutaj https://irch.info/index.php?pg=kb.page&id=133
4) Zatrzymaj usługę MySQL, wyszukując „usługi” w przycisku Start systemu Windows.
5) Następnie rozpakuj plik timezone_2017c_posix.zip, a następnie skopiuj znajdujące się w nim pliki (skopiuj pliki bezpośrednio, nie kopiuj całego folderu) i wklej w
C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\
6) W przypadku MySQL 5.7, timezone_2017c_posix.zip po rozpakowaniu poda plik .sql i może nie rozwiązać problemu. Więc śmiało pobierz plik zip dla wersji 5.6, nawet jeśli używasz MySQL 5.7 i skopiuj te pliki do
C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\
7) Uruchom ponownie serwer MySQL. Aby sprawdzić, czy CONVERT_TZ () działa, uruchom to zapytanie sql.
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta');
i sprawdź, czy dane wyjściowe nie są zerowe.źródło
jeśli
data too long for column 'abbreviation' at row 1
pojawi się błąd, zobacz: https://bugs.mysql.com/bug.php?id=68861rozwiązaniem byłoby uruchomienie następującego
spowoduje to dodanie linii wyłączającej tryb mysql i umożliwiającej mysql wstawianie obciętych danych, było to spowodowane błędem mysql, w którym mysql dodałby znak null na końcu (zgodnie z powyższym linkiem)
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql (if the above gives error "data too long for column 'abbreviation' at row 1") mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/zut.sql echo "SET SESSION SQL_MODE = '';" > /tmp/mysql_tzinfo_to.sql cat /tmp/zut.sql >> /tmp/mysql_tzinfo_to.sql mysql --defaults-file=/etc/mysql/my.cnf --user=verifiedscratch -p mysql < /tmp/mysql_tzinfo_to.sql
źródło
Oto kroki, aby to działało, jeśli jesteś w systemie Windows i używasz MySQL 5.7.
mysql -u root -p password
.use mysql
aby wybrać bazę danych MySQL.Po pomyślnym zakończeniu powinieneś móc używać
CONVERT_TZ
i innych funkcji strefy czasowej.źródło
W systemie Mac OS Catalina podczas korzystania z XAMPP,
Przejdź do folderu / Applications / XAMPP / xamppfiles / bin w Terminalu, a następnie uruchom następujące.
./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Lokalna strefa czasowa musi być ustawiona - zobacz stronę podręcznika zic / local /" | ./mysql -u root mysql
To zadziałało dla mnie.
źródło