convert_tz null döndürür


98

Bunun aptalca geldiğini biliyorum ama kullandığımda

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time

NULL çıktılar. Ubuntu 12.04 64 bit'te MySQL Workbench kullanıyorum ve diğer dizüstü bilgisayarımda / işletim sistemimde çalışıyor (ayrıca MySQL Workbench kullanarak).

Yanıtlar:


188

Bu, saat dilimi tablosunu mysql'e yüklemediyseniz gerçekleşir.

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

mysql MySQL'e özgü konfigürasyon verilerini tutan yerleşik veritabanının adıdır.


1
Bunu sadece bir kez mi yoksa MySql her başladığında mı yapmanız gerekiyor?
— Abe Miessler

3
Sadece bir kere. Bilgiyi o andan itibaren kullanılacak olan MySQL'e bir tabloya yükler.
— Barmar

2
Kuvvet bayrağını, karşılaştığınız hataları geçersiz kılmak için de kullanabilirsiniz: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
— pislik

3
MySQL arka planını da yürürlüğe girmeden önce (Debian'da) yeniden başlatmam gerekiyordu.
— Ekster

3
Merhaba, bu komutu çalıştırdığımda şöyle bir hata alıyorum: Uyarı: Saat dilimi olarak '/usr/share/zoneinfo/iso3166.tab' yüklenemiyor. Atlıyorum. Uyarı: '/usr/share/zoneinfo/zone.tab' saat dilimi olarak yüklenemiyor. Atlıyorum.
— Ghanshyam Katriya

26

Bu konuyu, kabul edilen cevapta komutu çalıştırdıktan sonra (MySQL'in geliştirici sitesinde de aynıdır) neden komutun aşağıdaki gibi saat dilimleri arasında dönüştüremediğini anlamaya çalıştıktan sonra buldum

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time

OS X'te sorunlara neden olan iki dosya olduğu ortaya çıktı: /usr/share/zoneinfo/Factoryve /usr/share/zoneinfo/+VERSION.

Düzeltme ... bu dosyaları geçici olarak /usr/share/zoneinfo/.bak/komuta izin vermesi gibi farklı bir konuma taşımak

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

tüm beklenen saat dilimi bilgilerini tam olarak doldurmak için.

Bu, MySQL'in yüklü sürümünde bir hata olabilir veya olmayabilir:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper

Ben de çalışıyorum STRICT_MODE.

Her durumda, umarım bu, düzeltmeyi arayan herkes için birkaç baş ağrısından kurtarır.


13

Windows ortamının dışında, Saat Dilimini şu şekilde ayarlayabilirsiniz:

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

Gelen , Windows ortamında,

1. download Time zone description tables from http://dev.mysql.com/downloads/timezones.html

2. Stop MySQL server

3. Put then inside Mysql installation package (yani. C: \ Program Files \ MySQL \ data \ mysql) `

4. Start MySQL server

..İşin bitti ..

Eğer alıyorsanız hala varsa NULLiçin CONVERT_TZ indirin mysql veritabanına bu veritabanı tabloları ve onunla insert http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

Artık sorun çözülecektir .. :)



2

MAMP PRO

  1. Açık Terminal
  2. cd /usr/share/zoneinfo/
  3. sudo mv +VERSION ~/Desktop
  4. cd /applications/MAMP/Library/bin
  5. sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
  6. sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/

İkili klasörün konumu dışında, bu genel olarak macOS için geçerlidir. Teşekkürler!
— Colonelclick

2

1) Windows'ta, C:\Program Files\MySQL\diğer yanıtlarda olduğu gibi artık herhangi bir veri klasörü yok .

2) Bu durumda, arayın C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. Genellikle bu klasör gizlidir ve C:\ProgramData\bazı zamanlar görmeyeceksiniz .

3) Burada https://irch.info/index.php?pg=kb.page&id=133 açıklandığı gibi Gizli dosyaları ve Klasörleri görmek için Görünüm sekmesindeki Ayarları değiştirin.

4) Windows Başlat düğmesinde "hizmetler" arayarak MySQL hizmetini durdurun.

5) Daha sonra timezone_2017c_posix.zip dosyasını açın ve içindeki dosyaları kopyalayın (dosyaları doğrudan kopyalayın, tüm klasörün kendisini kopyalamayın) ve yapıştırın C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) MySQL 5.7 için timezone_2017c_posix.zip, sıkıştırmayı açtıktan sonra bir .sql dosyası verir ve sorunu çözmeyebilir. Öyleyse devam edin ve MySQL 5.7 çalıştırıyor olsanız bile 5.6 için zip dosyasını indirin ve bu dosyalarıC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7) MySQL sunucusunu yeniden başlatın. CONVERT_TZ () 'nin çalışıp çalışmadığını kontrol etmek için bu sql sorgusunu çalıştırın.

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); ve boş olmayan çıktı için kontrol edin.


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

Hatayı alırsanız şu adrese data too long for column 'abbreviation' at row 1 bakın: https://bugs.mysql.com/bug.php?id=68861

düzeltme aşağıdakileri çalıştırmak olacaktır

bu, mysql modunu devre dışı bırakmak ve mysql'nin kesilmiş verileri eklemesine izin vermek için bir satır ekleyecektir; bunun nedeni, mysql'in sonunda boş bir karakter ekleyeceği bir mysql hatasıdır (yukarıdaki bağlantıya göre)

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

OSX El Capitan'ım var ve onu çalıştırmak için tek cevap bu. İleride referans olması için: Benim durumumda hata şunu belirtir: "Satır 1'deki 'Kısaltma' sütunu için veri çok uzun". Not: Diğer yanıtlarda belirtilen dosyalardan (sudo) mkdir veya (sudo) mv yapmak için tüm çabalar 'İzin reddedildi' ile sonuçlanır
— hepabolu

BTW MySQL'i yeniden başlatmam gerekmedi.
— hepabolu

1

Bunlar, Windows'daysanız ve MySQL 5.7 kullanıyorsanız, çalışmasını sağlamak için gereken adımlar.

  1. Bilgisayarım / Bilgisayar / Bu PC'ye veya işletim sisteminizdeki ad ne olursa olsun sağ tıklayın ve Özellikler'i seçin.
  2. Sol panelden "Gelişmiş sistem ayarları" nı seçin.
  3. "Çevresel Değişkenler" i seçin, MySQL bin dizininizin tam yol adını girin (genellikle C: \ Program Files \ MySQL \ MySQL Server 5.7 \ bin içinde olacaktır).
  4. Cmd istemini açın, kullanarak mysql'ye girin mysql -u root -p password.
  5. use mysqlMySQL DB'yi seçmek için girin .
  6. Https://dev.mysql.com/downloads/timezones.html adresinden "timezone_YYYYc_posix_sql.zip" dosyasını indirin (YYYY yerine, 2017 veya 2018 gibi o sayfada bulunan maksimum yılı değiştirin) .
  7. Çıkarın ve dosyayı metin düzenleyicide açın.
  8. İçeriği kopyalayın ve cmd komut isteminde çalıştırın.

Başarılı bir şekilde tamamladığınızda, CONVERT_TZve diğer saat dilimi işlevlerini kullanabilmeniz gerekir .


0

Mac OS Catalina'da XAMPP kullanırken,

Terminal'de / Applications / XAMPP / xamppfiles / bin klasörüne gidin ve ardından aşağıdakileri çalıştırın.

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Yerel saat dilimi ayarlanmalıdır - bkz. zic kılavuz sayfası / yerel /" | ./mysql -u kök mysql

Bu benim için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.