MySQL có hỗ trợ múi giờ không?
Trong bài viết này, chúng tôi sẽ thảo luận về cách bạn có thể thay đổi múi giờ MySQL trên máy chủ của mình để dữ liệu được lưu trữ trong cơ sở dữ liệu của bạn theo mặc định sẽ sử dụng múi giờ mà bạn đã chỉ định Show
Rất nhiều lúc múi giờ địa phương của bạn sẽ khác với múi giờ của máy chủ MySQL và điều này có thể khiến bạn khó làm việc với dữ liệu bên trong cơ sở dữ liệu hơn. Sử dụng các bước sau, bạn có thể cập nhật múi giờ của máy chủ MySQL sao cho khớp với múi giờ của bạn để làm việc với dữ liệu này dễ dàng hơn Thay đổi này sẽ yêu cầu quyền truy cập root vào VPS (Máy chủ riêng ảo) hoặc gói lưu trữ máy chủ chuyên dụng hoặc bạn có thể liên hệ với bộ phận hỗ trợ của chúng tôi để thay đổi điều này trên máy chủ của bạn. Bạn cũng có thể chỉ cần biết cách chuyển đổi thời gian MySQL không yêu cầu quyền truy cập root và có thể được thực hiện trên máy chủ dùng chung Không có thời gian để đọc hướng dẫn đầy đủ?Thay đổi múi giờ trong MySQL
Bây giờ bạn đã biết cách cập nhật cài đặt múi giờ của máy chủ MySQL, để giúp đảm bảo dữ liệu được lưu trữ trong cơ sở dữ liệu dễ dàng cho bạn làm việc với. Bạn cũng có thể sử dụng các múi giờ được đặt tên thay vì GMT -6. 00, nhưng điều này trước tiên sẽ yêu cầu bạn tải các bảng múi giờ vào cơ sở dữ liệu mysql. Thông tin thêm về điều này có thể được tìm thấy trên trang MySQL liên quan đến mysql_tzinfo_to_sql và tải các bảng múi giờ Việc xử lý múi giờ đôi khi có thể gây nhầm lẫn, đặc biệt là khi xử lý việc di chuyển dữ liệu sang một máy chủ khác chạy trên một múi giờ khác, khi chuyển sang múi giờ Giờ tiết kiệm ánh sáng ban ngày (DST) hoặc khi giới thiệu giây nhuận. Ngày được lưu trữ có còn ý nghĩa sau khi thay đổi cấu hình toàn hệ thống không? Có rất nhiều tài liệu về MySQL và quản lý múi giờ, nhưng cũng có thông tin bị thiếu vì các tính năng và bản sửa lỗi mới liên tục được đưa vào Máy chủ MySQL trong lĩnh vực này. Vì vậy, tôi nghĩ rằng dành một vài từ ở đây để tóm tắt cách xử lý múi giờ tốt nhất và cập nhật thông tin này để phản ánh việc triển khai hiện tại có thể là một ý kiến hay Các chương Toàn cầu hóa MySQL ghi lại mọi thứ bạn cần biết để xử lý các múi giờ và bộ ký tự Cài đặt múi giờ MySQLTrước hết, hãy tóm tắt các tham số cấu hình ảnh hưởng đến cách MySQL hoạt động với các múi giờ là gì. Có thể định cấu hình múi giờ bằng các tham số sau
Ngoài ra còn có một cài đặt khác đáng lưu ý và đó là thời gian hiện tại của khách hàng, có thể định cấu hình bằng cách sử dụng biến dấu thời gian. Không thực sự liên quan đến múi giờ, nhưng đáng để biết. Nó đặt thời gian mong muốn để khách hàng khôi phục từ e. g. nhật ký nhị phân và bao gồm câu lệnh NOW(). Vì vậy, nó ảnh hưởng đến giá trị được trả về bởi NOW() MySQL kế thừa múi giờ của hệ điều hànhMột trong những tùy chọn khả thi để thay đổi múi giờ của hệ thống MySQL là thay đổi múi giờ của hệ điều hành. MySQL sẽ kế thừa múi giờ của hệ điều hành để khởi tạo date19 khi bắt đầu. Hãy xem lại các lệnh sẽ được sử dụng trong Linux để đọc cài đặt múi giờ hiện tại của hệ điều hành Khám phá múi giờ hiện tạidate2____13 Thay đổi múi giờdate4 Liệt kê các múi giờ có sẵndate5 Thay đổi múi giờ của hệ thống MySQL và máy kháchThay vì thay đổi múi giờ của hệ điều hành để nó được tải vào thời điểm bắt đầu của MySQL (lần lượt khởi tạo date19), có thể đặt MySQL date19 bằng một trong hai cách sau:
Lưu ý rằng sử dụng một trong hai phương pháp sẽ không thành công với lỗi sau nếu các vùng không được nhập vào MySQL trước date1 Kết quả tương tự nếu cố gắng đặt time_zone date8 Sau đó, hãy nhập thông tin múi giờ vào MySQL, tận dụng lợi thế của mysql_tzinfo_to_sql mysql -e "SELECT NOW();"1 Các cảnh báo có thể bị bỏ qua, chúng được báo cáo khi công cụ cố gắng nhập các tệp linh tinh không liên quan được lưu trữ trong thư mục date83. Bây giờ các bảng vùng đã được tải vào MySQL, có thể xác minh chúng mysql -e "SELECT NOW();"3 Hiện có thể đặt múi giờ hệ thống mong muốn bằng cách đặt biến môi trường tương ứng (nó sẽ cần khởi động lại) mysql -e "SELECT NOW();"4 Phương pháp thay thế để đặt múi giờ hệ thống đang sử dụng –timezone với date82. Sau khi khởi động lại máy chủ, hiện đã hoàn tất thành công, hãy kiểm tra mysql -e "SELECT NOW();"6 Tùy chọn này sẽ tránh thay đổi múi giờ của hệ điều hành. Các giá trị có thể có cho –timezone hoặc TZ phụ thuộc vào hệ thống. Tham khảo tài liệu hệ điều hành của bạn để xem giá trị nào được chấp nhận. Giờ đây, khách hàng có thể đặt date85 thành múi giờ mong muốn tùy ý cho phiên date30 Di chuyển máy chủHãy xem điều gì sẽ xảy ra với dữ liệu được lưu trữ khi múi giờ của hệ điều hành thay đổi (hoặc thay đổi là bắt buộc, như thường lệ, do thay đổi đối với biến môi trường TZ). Hãy chú ý đến date86. Nếu chúng ta chèn một bảng date31 Với dữ liệu date32 Và sau đó chúng tôi cố gắng truy xuất nó, nó sẽ chính xác cho đến khi chúng tôi vẫn giữ nguyên cài đặt múi giờ date33 Nhưng nếu chúng tôi khởi động lại máy chủ trên một múi giờ khác (e. g. một máy chủ sử dụng một biến môi trường TZ khác) date34 Sau đó, DATETIME sẽ được giữ nguyên, nhưng DẤU THỜI GIAN sẽ được diễn giải bằng cách sử dụng date85 khác, kế thừa từ date86. Đây là điểm khác biệt của DATETIME với TIMESTAMP. DATETIME luôn được đọc "nguyên trạng", trong khi TIMESTAMP được tính theo phiên date85 date35 Tại thời điểm này, có thể làm cho múi giờ của máy chủ thay đổi không ảnh hưởng đến kết quả bằng cách đặt date36 tuyên bố hữu íchCho đến nay, bạn đã thấy mối quan hệ giữa HĐH và MySQL liên quan đến cài đặt múi giờ là gì. Trước khi xem xét các ví dụ khác, đây là một số câu lệnh MySQL có thể hữu ích Chọn một cột dấu thời gian ở định dạng UTCdate37 Chọn ngày giờ hiện tại trong múi giờ phiêndate38 date39 Chọn ngày giờ hiện tại theo UTCdate40 date41 Lấy đồng bằng múi giờ hiện tại từ UTCdate42 Nhận dấu thời gian UNIX hiện tại (tính bằng giây)date43 date44 DẤU THỜI GIAN, DATETIME và chênh lệch múi giờTrước khi xem xét sâu về sự khác biệt giữa TIMESTAMP và DATETIME, hãy nhớ rằng MySQL Server 8. 0. 19 độ lệch múi giờ được giới thiệu, cho phép chỉ định ngày ở định dạng này date45 Kiểm tra ghi chú phát hành, yêu cầu tính năng và nhật ký công việc liên quan. Bây giờ tôi sẽ chia sẻ một số chi tiết về lưu trữ và truy xuất giá trị ngày giờ và dấu thời gian sự kiện DẤU THỜI GIANTừ mô tả nhật ký công việc, chúng tôi có
sự kiện DATETIME
ví dụSử dụng lại định nghĩa bảng này date31 Với các cài đặt múi giờ này date47 Hãy chèn một số dữ liệu date48 date49 Hàng đầu tiên có
hàng thứ hai
Hãy chơi một chút date50 date51 Liệu nó có ý nghĩa? . Vì vậy, nó được trả lại theo cách nó được lưu trữ trong đoạn văn trước Ví dụ DATETIME và TIMESTAMPLần đầu tiên khi tôi kiểm tra các ví dụ từ tài liệu, tôi thừa nhận rằng tôi đã phải suy nghĩ trong giây lát. Nhưng đề cập đến các quy tắc được tóm tắt trước đây là “sự thật”, mọi thứ đều rõ ràng và mạch lạc. Hãy đi qua ví dụ từng bước. Hãy xem xét múi giờ của hệ thống EST date52 Điều đó có sự thay đổi sau từ UTC date53 Sau đó, hãy tạo các bảng để kiểm tra cả hai loại date54 date55 Và chúng ta hãy tiến hành chèn dữ liệu vào bảng DATETIME date56____157 Đây là những gì được trả về từ bảng DATETIME date58 Giải thích (xem các sự kiện DATETIME trước đó để biết các quy tắc)
Bây giờ hãy chèn bảng TIMESTAMP date59 date57 Đây là những gì được trả về từ bảng TIMESTAMP date11 Giải thích (xem các sự kiện TIMESTAMP trước đó để biết các quy tắc)
Ví dụ UNIX_TIMESTAMPMột lần nữa chúng ta hãy xem việc sử dụng offset để có các chuỗi UTC rõ ràng. Khi một phần bù được chỉ định, sẽ không có phép tính nào đối với @@time_zone. nghĩa đen đã được thể hiện dưới dạng UTC, nó được chuyển đổi thành UTC mà không cần bù đắp cho việc sử dụng/lưu trữ date12 date13 Điều này đang chuyển đổi dấu thời gian có độ lệch thành '2015-11-13 09. 20. 19' và trả về giây kể từ '1970-01-01 00. 00. 00’ UTC. Bây giờ chúng ta hãy thay đổi mysql -e "SELECT NOW();"10 date14 date15 Dấu thời gian ở địa phương mysql -e "SELECT NOW();"10, CET, là UTC+1. Vì vậy, những giây kể từ '1970-01-01 00. 00. 00’ UTC được trả lại cho ‘2015-11-13 09. 20. 19’ Bây giờ, chuyển sang địa phương với UTC date50 Chữ ‘2015-11-13 09. 20. 19' không cần bất kỳ chuyển đổi nào, nó đã sẵn sàng để đưa vào UNIX_TIMESTAMP vì nó đã là UTC date17 Điểm rút ra & khuyến nghị
MDS thì sao?Và nếu bạn đang thắc mắc về cài đặt mặc định múi giờ cho Hệ thống cơ sở dữ liệu dịch vụ cơ sở dữ liệu MySQL, thì đây là date18 Phần kết luậnTôi đã chia sẻ một số điểm cơ bản cần lưu ý khi lập kế hoạch lưu trữ ngày và giờ. Tôi sẽ viết nhiều hơn trong tương lai để quan tâm đến khách hàng (chẳng hạn như thời gian C/J và đề xuất). Tôi hy vọng bản tóm tắt này sẽ hữu ích và vui lòng bình luận để chia sẻ các đề xuất, nghi ngờ và báo cáo bất kỳ trường hợp phụ nào mà bạn biết. Cảm ơn vì đã đọc MySQL có lưu trữ múi giờ không?MySQL chuyển đổi các giá trị DẤU THỜI GIAN từ múi giờ hiện tại sang UTC để lưu trữ và ngược lại từ UTC sang múi giờ hiện tại để truy xuất. (Điều này không xảy ra đối với các loại khác như DATETIME. ) Theo mặc định, múi giờ hiện tại cho mỗi kết nối là thời gian của máy chủ.
MySQL sử dụng múi giờ nào?Theo mặc định, múi giờ cho phiên bản Cơ sở dữ liệu MySQL là Giờ phối hợp quốc tế (UTC) . Thay vào đó, bạn có thể đặt múi giờ cho phiên bản CSDL thành múi giờ địa phương cho ứng dụng của mình.
MySQL có phải là giờ UTC không?Trong MySQL, UTC_TIMESTAMP trả về ngày và giờ UTC hiện tại dưới dạng giá trị trong 'YYYY-MM-DD HH. MM. SS' hoặc YYYYMMDDHHMMSS .
Tôi có nên sử dụng múi giờ trong cơ sở dữ liệu không?Cơ sở dữ liệu sẽ chuyển đổi bất kỳ ngày giờ nào thành kỷ nguyên UTC để lưu trữ nội bộ. Tuy nhiên, một số cơ sở dữ liệu có thể cho phép lưu trữ thông tin múi giờ. Nếu đúng như vậy, bạn nên chuyển đổi tất cả các ngày thành UTC trước khi lưu trữ . Không sử dụng múi giờ địa phương. |