convert_tz mengembalikan null

93

Saya tahu ini terdengar bodoh, tetapi saat saya menggunakannya

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

itu mengeluarkan NULL. Saya menggunakan MySQL Workbench di Ubuntu 12.04 64 bit, dan berfungsi di laptop / os saya yang lain (juga menggunakan MySQL Workbench).

mohur
sumber

Jawaban:

177

Ini akan terjadi jika Anda belum memuat tabel zona waktu ke mysql.

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Barmar
sumber
1
Apakah Anda hanya perlu melakukan ini sekali, atau setiap kali MySql dijalankan?
Abe Miessler
3
Hanya sekali. Ini memuat informasi ke dalam tabel ke MySQL, yang digunakan sejak saat itu.
Barmar
2
Anda dapat menggunakan bendera gaya untuk menimpa kesalahan yang Anda hadapi juga: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
sampah
3
Saya perlu me-restart daemon MySQL juga sebelum itu berlaku (di Debian).
Ekster
2
Hai, ketika saya menjalankan perintah ini, saya mendapat kesalahan seperti ini: Peringatan: Tidak dapat memuat '/usr/share/zoneinfo/iso3166.tab' sebagai zona waktu. Lewati itu. Peringatan: Tidak dapat memuat '/usr/share/zoneinfo/zone.tab' sebagai zona waktu. Lewati itu.
Ghanshyam Katriya
26

Saya menemukan utas ini setelah menghabiskan beberapa waktu mencoba mencari tahu mengapa setelah menjalankan perintah dalam jawaban yang diterima (yang sama di situs dev MySQL) perintah tidak dapat mengonversi antar zona waktu seperti

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

Ternyata di OS X ada dua file yang menyebabkan masalah: /usr/share/zoneinfo/Factorydan/usr/share/zoneinfo/+VERSION .

Cara mengatasinya ... untuk sementara memindahkan file-file ini ke lokasi berbeda seperti /usr/share/zoneinfo/.bak/memungkinkan untuk perintah

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

untuk mengisi semua informasi zona waktu yang diharapkan.

Ini mungkin atau mungkin bukan bug dalam versi MySQL yang saya instal:

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

Saya juga beroperasi di STRICT_MODE .

Bagaimanapun, saya harap ini menghemat beberapa sakit kepala bagi siapa pun yang mencari perbaikan.

Jim Schubert
sumber
13

Selain dari lingkungan Windows, Anda dapat mengatur Zona Waktu dengan

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

Di lingkungan Windows ,

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 (mis. C: \ Program Files \ MySQL \ data \ mysql) `

4. Start MySQL server

..Pekerjaan Anda selesai ..

Jika masih Anda mendapatkan NULLuntuk CONVERT_TZ Unduh tabel database ini dan masukkan ke database mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

Sekarang masalah Anda akan terpecahkan .. :)

Rakesh
sumber
2

Jika Anda menggunakan MySql di Windows, Anda harus memuat data zona waktu ke skema mysql. Ini adalah CARA yang bagus: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html

Jika Anda tidak melakukan ini, fungsi CONVERT_TZ tidak akan mengenali zona waktu input Anda (contoh: 'UTC', 'Asia / Jakarta'), dan hanya akan mengembalikan NULL.

Domenic D.
sumber
2

MAMP PRO

  1. Buka 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/
Jaseem Abbas
sumber
Selain lokasi folder biner, ini berlaku untuk macOS secara umum. Terima kasih!
kolonelclick
2

1) Di Windows, tidak ada folder data sekarang C:\Program Files\MySQL\seperti di jawaban lain.

2) Dalam hal ini, cari C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. Umumnya folder ini tersembunyi dan Anda tidak akan melihatnya C:\ProgramData\beberapa kali.

3) Ubah Pengaturan di tab Tampilan untuk melihat file dan Folder Tersembunyi seperti yang dijelaskan di sini https://irch.info/index.php?pg=kb.page&id=133

4) Hentikan layanan MySQL dengan mencari "layanan" di tombol Start Windows.

5) Kemudian unzip timezone_2017c_posix.zip lalu salin file di dalamnya (salin file secara langsung, jangan salin seluruh folder itu sendiri), dan tempel C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) Untuk MySQL 5.7, timezone_2017c_posix.zip hanya akan memberikan file .sql setelah unzip dan mungkin tidak menyelesaikan masalah. Jadi lanjutkan dan unduh file zip untuk 5.6 bahkan jika Anda menjalankan MySQL 5.7 dan salin file tersebut keC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7) Mulai ulang server MySQL. Untuk memeriksa apakah CONVERT_TZ () berfungsi, jalankan kueri sql ini.

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); dan periksa keluaran non-null.

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

jika Anda mendapatkan kesalahan data too long for column 'abbreviation' at row 1 maka lihat: https://bugs.mysql.com/bug.php?id=68861

perbaikannya akan menjalankan berikut ini

ini akan menambahkan baris untuk menonaktifkan mode mysql dan memungkinkan mysql untuk memasukkan data yang terpotong ini karena bug mysql di mana mysql akan menambahkan karakter null di bagian akhir (sesuai dengan tautan di atas)

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
Timo Huovinen
sumber
Saya memiliki OSX El Capitan dan ini adalah satu-satunya jawaban untuk membuatnya berfungsi. Untuk referensi di masa mendatang: dalam kasus saya kesalahan menyatakan: "Data terlalu panjang untuk kolom 'Singkatan' di baris 1". Catatan: semua upaya untuk melakukan (sudo) mkdir atau (sudo) mv dari file yang disebutkan dalam jawaban lain menghasilkan 'Izin ditolak'
hepabolu
BTW Saya tidak perlu me-restart MySQL.
hepabolu
1

Ini adalah langkah-langkah untuk membuatnya berfungsi jika Anda berada di windows dan menggunakan MySQL 5.7.

  1. Klik kanan pada My Computer / Computer / This PC atau apapun namanya di OS Anda dan pilih Properties.
  2. Pilih "Pengaturan sistem lanjutan" dari panel kiri.
  3. Pilih "Variabel Lingkungan", masukkan nama jalur lengkap direktori bin MySQL Anda (biasanya di, C: \ Program Files \ MySQL \ MySQL Server 5.7 \ bin).
  4. Buka cmd prompt, masuk ke mysql menggunakan mysql -u root -p password .
  5. Memasukkan use mysql untuk memilih MySQL DB.
  6. Unduh file "timezone_YYYYc_posix_sql.zip" (Sebagai ganti YYYY, gantikan tahun maksimum yang tersedia di halaman tersebut seperti 2017 atau 2018) dari https://dev.mysql.com/downloads/timezones.html .
  7. Ekstrak dan buka file di editor teks.
  8. Salin isinya dan jalankan di prompt cmd.

Setelah berhasil menyelesaikan, Anda harus dapat menggunakan CONVERT_TZdan fungsi zona waktu lainnya.

Orang asing
sumber
0

Di Mac OS Catalina saat menggunakan XAMPP,

Buka folder / Applications / XAMPP / xamppfiles / bin di Terminal lalu jalankan perintah berikut.

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Zona waktu lokal harus disetel - lihat halaman manual zic / local /" | ./mysql -u root mysql

Ini berhasil untuk saya.

Rem
sumber