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.