convert_tz trả về null


92

Tôi biết điều này nghe có vẻ ngu ngốc, nhưng khi tôi sử dụng

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

nó xuất ra NULL. Tôi đang sử dụng MySQL Workbench trong Ubuntu 12.04 64 bit và nó hoạt động trong máy tính xách tay / hệ điều hành khác của tôi (cũng sử dụng MySQL Workbench).

Câu trả lời:


171

Điều này sẽ xảy ra nếu bạn chưa tải bảng múi giờ vào mysql.

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

1
Bạn chỉ cần thực hiện việc này một lần hay mỗi khi MySql khởi động?
Abe Miessler

3
Chỉ một lần. Nó tải thông tin vào một bảng vào MySQL, được sử dụng từ đó trở đi.
Barmar

2
Bạn cũng có thể sử dụng cờ lực lượng để ghi đè bất kỳ lỗi nào mà bạn gặp phải: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
scum

3
Tôi cũng cần khởi động lại daemon MySQL trước khi nó có hiệu lực (trên Debian).
Ekster

2
Xin chào, khi tôi chạy lệnh này, tôi gặp lỗi như sau: Cảnh báo: Không thể tải '/usr/share/zoneinfo/iso3166.tab' làm múi giờ. Bỏ qua nó. Cảnh báo: Không thể tải '/usr/share/zoneinfo/zone.tab' làm múi giờ. Bỏ qua nó.
Ghanshyam Katriya

26

Tôi đã tìm thấy chuỗi này sau khi dành một thời gian cố gắng tìm hiểu lý do tại sao sau khi chạy lệnh trong câu trả lời được chấp nhận (tương tự trên trang web nhà phát triển của MySQL), lệnh không thể chuyển đổi giữa các múi giờ chẳng hạn như

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

Hóa ra là trên OS X có hai tệp gây ra sự cố: /usr/share/zoneinfo/Factory/usr/share/zoneinfo/+VERSION.

Cách khắc phục ... tạm thời di chuyển các tệp này đến một vị trí khác, chẳng hạn như /usr/share/zoneinfo/.bak/cho phép lệnh

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

để điền đầy đủ tất cả thông tin về múi giờ dự kiến.

Đây có thể là lỗi trong phiên bản MySQL đã cài đặt của tôi:

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

Tôi cũng đang hoạt động trong STRICT_MODE.

Trong mọi trường hợp, tôi hy vọng điều này sẽ tiết kiệm được một số đau đầu cho bất kỳ ai đang tìm kiếm bản sửa lỗi.


13

Ngoài môi trường Windows, bạn có thể đặt Múi giờ bằng cách

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

Trong môi trường 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 (ví dụ: C: \ Program Files \ MySQL \ data \ mysql) '

4. Start MySQL server

..Công việc của bạn đã hoàn thành ..

Nếu bạn vẫn đang nhận được NULLcho CONVERT_TZ Tải các bảng cơ sở dữ liệu và chèn nó vào cơ sở dữ liệu mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

Bây giờ vấn đề của bạn sẽ được giải quyết .. :)



2

MAMP PRO

  1. Mở 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/

Khác với vị trí của thư mục nhị phân, điều này áp dụng cho macOS nói chung. Cảm ơn!
colonelclick

2

1) Trong Windows, không có bất kỳ thư mục dữ liệu nào C:\Program Files\MySQL\như trong các câu trả lời khác.

2) Trong trường hợp đó, hãy tìm C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. Nói chung thư mục này ẩn và bạn sẽ không nhìn thấy C:\ProgramData\một số lần.

3) Thay đổi tab Cài đặt trong Chế độ xem để xem các tệp và Thư mục ẩn như được giải thích tại đây https://irch.info/index.php?pg=kb.page&id=133

4) Dừng dịch vụ MySQL bằng cách tìm kiếm "dịch vụ" trong nút Bắt đầu của Windows.

5) Sau đó giải nén timezone_2017c_posix.zip và sau đó sao chép các tệp trong đó (sao chép trực tiếp các tệp, không sao chép toàn bộ thư mục) và dán vào C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) Đối với MySQL 5.7, timezone_2017c_posix.zip sẽ chỉ cung cấp tệp .sql sau khi giải nén và nó có thể không giải quyết được sự cố. Vì vậy, hãy tiếp tục và tải xuống tệp zip cho 5.6 ngay cả khi bạn đang chạy MySQL 5.7 và sao chép các tệp đó vàoC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7) Khởi động lại máy chủ MySQL. Để kiểm tra xem CONVERT_TZ () có hoạt động hay không, hãy chạy truy vấn sql này.

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); và kiểm tra đầu ra không rỗng.


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

nếu bạn gặp lỗi data too long for column 'abbreviation' at row 1 thì hãy xem: https://bugs.mysql.com/bug.php?id=68861

cách khắc phục sẽ là chạy như sau

điều này sẽ thêm một dòng để tắt chế độ mysql và cho phép mysql chèn dữ liệu bị cắt ngắn, điều này là do lỗi mysql trong đó mysql sẽ thêm một ký tự null ở cuối (theo liên kết ở trên)

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

Tôi có OSX El Capitan và đây là câu trả lời duy nhất để làm cho nó hoạt động. Để tham khảo trong tương lai: trong trường hợp của tôi, lỗi cho biết: "Dữ liệu quá dài cho cột 'Viết tắt' ở hàng 1". Lưu ý: tất cả các nỗ lực để làm (sudo) mkdir hoặc (sudo) mv của các tập tin đề cập trong câu trả lời khác dẫn đến 'Permission denied'
hepabolu

BTW Tôi không cần khởi động lại MySQL.
hepabolu

1

Đây là các bước để làm cho nó hoạt động nếu bạn đang sử dụng windows và sử dụng MySQL 5.7.

  1. Nhấp chuột phải vào My Computer / Computer / This PC hoặc bất kỳ tên nào trong hệ điều hành của bạn và chọn Thuộc tính.
  2. Chọn "Cài đặt hệ thống nâng cao" từ bảng điều khiển bên trái.
  3. Chọn "Biến môi trường", nhập tên đường dẫn đầy đủ của thư mục bin MySQL của bạn (thường thì nó sẽ nằm trong C: \ Program Files \ MySQL \ MySQL Server 5.7 \ bin).
  4. Mở lời nhắc cmd, nhập vào mysql bằng cách sử dụng mysql -u root -p password.
  5. Enter use mysqlđể chọn MySQL DB.
  6. Tải xuống tệp "timezone_YYYYc_posix_sql.zip" (Thay cho YYYY, thay thế năm tối đa có sẵn trong trang đó như 2017 hoặc 2018) từ https://dev.mysql.com/downloads/timezones.html .
  7. Giải nén nó và mở tệp trong trình soạn thảo văn bản.
  8. Sao chép nội dung và thực thi trong dấu nhắc cmd.

Sau khi hoàn thành thành công, bạn sẽ có thể sử dụng CONVERT_TZvà các chức năng múi giờ khác.


0

Trên Mac OS Catalina khi sử dụng XAMPP,

Vào thư mục / Applications / XAMPP / xamppfiles / bin trong Terminal rồi chạy theo sau.

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Múi giờ địa phương phải được đặt - xem trang hướng dẫn sử dụng zic / local /" | ./mysql -u root mysql

Điều này đã làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.