Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Múi giờ MySQL

Theo mặc định, (ít nhất là trên các bản cài đặt dựa trên Debian) không có dữ liệu múi giờ nào được tải vào MySQL. Nếu bạn muốn kiểm tra xem chúng đã được tải chưa, hãy thử thực hiện:

SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');

Nếu nó trả về DATETIME (trong trường hợp này là 2012-06-07 08:00:00 ), bạn đã tải các múi giờ. Nếu nó trả về NULL , họ không. Khi không được tải, bạn bị giới hạn chuyển đổi bằng cách sử dụng các hiệu số (ví dụ:+10:00 hoặc -6:00 ).

Điều này sẽ hoạt động tốt trong nhiều trường hợp, nhưng có những lúc tốt hơn là sử dụng các múi giờ được đặt tên, như để không lo lắng về thời gian tiết kiệm ánh sáng ban ngày. Việc thực thi lệnh sau sẽ tải dữ liệu múi giờ từ hệ thống (chỉ dành cho Unix. Tôi không chắc lệnh Windows tương đương sẽ là gì):

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

Nếu bạn cần liên tục dựa vào múi giờ MySQL, lệnh trên phải được thực thi mỗi khi cập nhật múi giờ hệ thống . Bạn cũng có thể thêm nó vào công việc cron hàng tuần hoặc hàng tháng để tự động làm việc đó cho bạn.

Sau đó, để xem danh sách múi giờ, chỉ cần thực hiện như sau:

USE mysql;
SELECT * FROM `time_zone_name`;

Lưu ý, thông tin múi giờ chiếm khoảng 5 MB trong MySQL. Nếu bạn muốn hủy tải thông tin múi giờ, chỉ cần thực hiện như sau và khởi động lại MySQL:

TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;

Không DROP những bảng này hoặc những điều tồi tệ sẽ xảy ra.

Chỉnh sửa:

Dựa trên nhận xét của người dùng bên dưới, nếu bạn muốn múi giờ tự động được cập nhật khi cập nhật hệ thống, trước tiên bạn cần cho phép root đăng nhập mà không được nhắc nhập mật khẩu.

MySQL> =5.6.6

Thực thi [ nguồn sau ]:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

MySQL <5.6.6

Tạo ~/.my.cnf tệp (nếu nó chưa tồn tại) và thêm những thứ sau:

[client]
user=root
password=yourMysqlRootPW

Sau đó thực thi chmod 600 ~/.my.cnf để đảm bảo không ai khác có thể đọc nó.

Cập nhật tập lệnh

Thêm tập lệnh sau vào crontab để được thực thi một lần mỗi ngày:

#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24   
# hours and do not have ".tab" in the name (since these are not timezone files) 
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
    echo "Updating MySQL timezone info"
    # Note, suppressing STDERR here because of the .tab files above
    # that cause warnings.
    mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
    echo "Done!\n"
fi

Xóa echo nếu bạn không muốn bất kỳ đầu ra nào.

Lưu ý:Đây là (hầu hết) chưa được kiểm tra. Hãy cho tôi biết nếu bạn có bất kỳ vấn đề nào và tôi sẽ cập nhật câu trả lời này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xác định phiên bản MySQL

  2. MySQL 1062 - Mục nhập trùng lặp '0' cho khóa 'CHÍNH'

  3. Khôi phục cơ sở dữ liệu MySQL từ các tệp vật lý

  4. Hàm MySQL ACOS () - Trả về Arc Cosine của một số

  5. Dữ liệu nhị phân trong MySQL