Để đi cùng với nhận xét của @ypercube rằng
[mysqld]
**other variables**
default_time_zone='+00:00'
0 được lưu trữ dưới dạng UTC nhưng được truy xuất dưới dạng múi giờ hiện tại, bạn có thể ảnh hưởng đến cài đặt múi giờ của máy chủ với tùy chọn - -default_time_zone để truy xuất. Điều này cho phép truy xuất của bạn luôn luôn ở UTC.Theo mặc định, tùy chọn là 'hệ thống', đó là cách đặt múi giờ hệ thống của bạn [có thể hoặc không phải là UTC!]:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 16:28:45 |
+---------------------+
1 row in set [0.00 sec]
Bạn có thể đặt điều này một cách linh hoạt:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
Hoặc vĩnh viễn trong My.cnf của bạn:
[mysqld]
**other variables**
default_time_zone='+00:00'
Khởi động lại máy chủ của bạn và bạn sẽ thấy sự thay đổi:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
5.1.15 & NBSP; Hỗ trợ múi giờ của máy chủ MySQL
Phần này mô tả các cài đặt múi giờ được duy trì bởi MySQL, cách tải các bảng hệ thống cần thiết để hỗ trợ thời gian được đặt tên, cách duy trì dòng điện với thay đổi múi giờ và cách bật hỗ trợ bước nhảy.
Bắt đầu với MySQL 8.0.19, độ lệch múi giờ cũng được hỗ trợ cho các giá trị DateTime được chèn; Xem Phần & NBSP; 11.2.2, Ngày The Date, DateTime và Timestamp Loại, để biết thêm thông tin.
Để biết thông tin về cài đặt múi giờ trong các thiết lập sao chép, xem Phần & NBSP; 17.5.1.14, các chức năng sao chép và hệ thống của Hồi giáo và Phần & NBSP; 17.5.1.33, Sao chép và múi giờ.
Biến múi giờ
Điền vào các bảng múi giờ
Giữ hiện tại với thay đổi múi giờ
Múi giờ nhảy vọt thứ hai hỗ trợ
Biến múi giờ
Máy chủ MySQL duy trì một số cài đặt múi giờ:
Múi thời gian hệ thống máy chủ. Khi máy chủ khởi động, nó cố gắng xác định múi giờ của máy chủ và sử dụng nó để đặt biến hệ thống
1.[mysqld] **other variables** default_time_zone='+00:00'
Để chỉ định rõ ràng múi giờ hệ thống cho máy chủ MySQL khi khởi động, hãy đặt biến môi trường
2 trước khi bạn khởi động MySQLD. Nếu bạn khởi động máy chủ bằng MySQLD_SAFE, tùy chọn[mysqld] **other variables** default_time_zone='+00:00'
3 của nó cung cấp một cách khác để đặt múi giờ hệ thống. Các giá trị cho phép cho[mysqld] **other variables** default_time_zone='+00:00'
2 và[mysqld] **other variables** default_time_zone='+00:00'
3 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 những giá trị nào được chấp nhận.mysqld. If you start the server using mysqld_safe, its[mysqld] **other variables** default_time_zone='+00:00'
3 option provides another way to set the system time zone. The permissible values for[mysqld] **other variables** default_time_zone='+00:00'
2 and[mysqld] **other variables** default_time_zone='+00:00'
3 are system dependent. Consult your operating system documentation to see what values are acceptable.[mysqld] **other variables** default_time_zone='+00:00'
Múi thời gian hiện tại của máy chủ. Biến hệ thống
6 toàn cầu cho biết múi giờ mà máy chủ hiện đang hoạt động. Giá trị[mysqld] **other variables** default_time_zone='+00:00'
6 ban đầu là[mysqld] **other variables** default_time_zone='+00:00'
8, cho thấy múi giờ của máy chủ giống như múi giờ hệ thống.[mysqld] **other variables** default_time_zone='+00:00'
Ghi chú
Nếu được đặt thành
9, mọi cuộc gọi hàm MySQL yêu cầu tính toán múi giờ sẽ thực hiện cuộc gọi thư viện hệ thống để xác định múi giờ hệ thống hiện tại. Cuộc gọi này có thể được bảo vệ bởi một mutex toàn cầu, dẫn đến tranh chấp.[mysqld] **other variables** default_time_zone='+00:00'
Giá trị múi giờ máy chủ toàn cầu ban đầu có thể được chỉ định rõ ràng khi khởi động với tùy chọn
0 trên dòng lệnh hoặc bạn có thể sử dụng dòng sau trong một tệp tùy chọn:mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | +00:00 | +00:00 | +--------------------+---------------------+ 1 row in set [0.00 sec] mysql> SELECT CURRENT_TIMESTAMP[]; +---------------------+ | CURRENT_TIMESTAMP[] | +---------------------+ | 2012-09-25 20:27:50 | +---------------------+ 1 row in set [0.01 sec]
default-time-zone='timezone'
Nếu bạn có đặc quyền
1 [hoặc đặc quyềnmysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | +00:00 | +00:00 | +--------------------+---------------------+ 1 row in set [0.00 sec] mysql> SELECT CURRENT_TIMESTAMP[]; +---------------------+ | CURRENT_TIMESTAMP[] | +---------------------+ | 2012-09-25 20:27:50 | +---------------------+ 1 row in set [0.01 sec]
2 không dùngmysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | +00:00 | +00:00 | +--------------------+---------------------+ 1 row in set [0.00 sec] mysql> SELECT CURRENT_TIMESTAMP[]; +---------------------+ | CURRENT_TIMESTAMP[] | +---------------------+ | 2012-09-25 20:27:50 | +---------------------+ 1 row in set [0.01 sec]
SET GLOBAL time_zone = timezone;
Múi giờ mỗi phiên. Mỗi máy khách kết nối có cài đặt múi giờ phiên riêng, được đưa ra bởi biến
6 phiên. Ban đầu, biến phiên lấy giá trị của nó từ biến[mysqld] **other variables** default_time_zone='+00:00'
6 toàn cầu, nhưng máy khách có thể thay đổi múi giờ của chính mình với câu lệnh này:[mysqld] **other variables** default_time_zone='+00:00'
SET time_zone = timezone;
Cài đặt múi giờ phiên ảnh hưởng đến việc hiển thị và lưu trữ các giá trị thời gian nhạy cảm với vùng. Điều này bao gồm các giá trị được hiển thị bởi các hàm như
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
5 hoặc mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
6 và các giá trị được lưu trữ và lấy từ các cột mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
7. Các giá trị cho các cột mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
7 được chuyển đổi từ múi giờ phiên sang UTC để lưu trữ và từ UTC sang múi giờ phiên để truy xuất.Cài đặt múi giờ phiên không ảnh hưởng đến các giá trị được hiển thị bởi các hàm như
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
9 hoặc các giá trị trong các cột default-time-zone='timezone'
0, default-time-zone='timezone'
1 hoặc default-time-zone='timezone'
2. Cũng không phải là các giá trị trong các loại dữ liệu được lưu trữ trong UTC; Múi giờ chỉ áp dụng cho chúng khi chuyển đổi từ các giá trị mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
7. Nếu bạn muốn số học dành riêng cho địa phương cho các giá trị default-time-zone='timezone'
0, default-time-zone='timezone'
1 hoặc default-time-zone='timezone'
2, hãy chuyển đổi chúng thành UTC, thực hiện số học và sau đó chuyển đổi trở lại.Các giá trị múi giờ phiên toàn cầu và phiên hiện tại có thể được truy xuất như thế này:
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
Các giá trị
default-time-zone='timezone'
7 có thể được đưa ra ở một số định dạng, không có giá trị nào nhạy cảm với trường hợp:Vì giá trị
8, chỉ ra rằng múi giờ của máy chủ giống như múi giờ hệ thống.[mysqld] **other variables** default_time_zone='+00:00'
Là một chuỗi chỉ ra một phần bù từ UTC có dạng ____ 49] ________ 50: ________ 51, có tiền tố với
2 hoặcSET GLOBAL time_zone = timezone;
3, chẳng hạn nhưSET GLOBAL time_zone = timezone;
4,SET GLOBAL time_zone = timezone;
5 hoặcSET GLOBAL time_zone = timezone;
6. Một số 0 hàng đầu có thể được sử dụng một cách tùy chọn cho các giá trị giờ dưới 10; MySQL chuẩn bị số 0 hàng đầu khi lưu trữ và truy xuất giá trị trong những trường hợp như vậy. MySQL chuyển đổiSET GLOBAL time_zone = timezone;
7 hoặcSET GLOBAL time_zone = timezone;
8 thànhSET GLOBAL time_zone = timezone;
9.SET GLOBAL time_zone = timezone;
Trước MySQL 8.0.19, giá trị này phải nằm trong phạm vi
0 đếnSET time_zone = timezone;
1, bao gồm; Bắt đầu với MySQL 8.0.19, phạm vi được phép làSET time_zone = timezone;
2 đếnSET time_zone = timezone;
3, bao gồm.SET time_zone = timezone;
Là một múi giờ được đặt tên, chẳng hạn như
4,SET time_zone = timezone;
5,SET time_zone = timezone;
6 hoặcSET time_zone = timezone;
7.SET time_zone = timezone;
Ghi chú
Nếu được đặt thành
9, mọi cuộc gọi hàm MySQL yêu cầu tính toán múi giờ sẽ thực hiện cuộc gọi thư viện hệ thống để xác định múi giờ hệ thống hiện tại. Cuộc gọi này có thể được bảo vệ bởi một mutex toàn cầu, dẫn đến tranh chấp.[mysqld] **other variables** default_time_zone='+00:00'
mysql> SET time_zone = 'UTC'; ERROR 1298 [HY000]: Unknown or incorrect time zone: 'UTC'
Điền vào các bảng múi giờ
Giá trị múi giờ máy chủ toàn cầu ban đầu có thể được chỉ định rõ ràng khi khởi động với tùy chọn
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
0 trên dòng lệnh hoặc bạn có thể sử dụng dòng sau trong một tệp tùy chọn:Ghi chú
Nếu được đặt thành
[mysqld]
**other variables**
default_time_zone='+00:00'
9, mọi cuộc gọi hàm MySQL yêu cầu tính toán múi giờ sẽ thực hiện cuộc gọi thư viện hệ thống để xác định múi giờ hệ thống hiện tại. Cuộc gọi này có thể được bảo vệ bởi một mutex toàn cầu, dẫn đến tranh chấp.Nếu hệ thống của bạn có cơ sở dữ liệu ZoneInfo riêng [tập hợp các tệp mô tả múi giờ], hãy sử dụng chương trình MySQL_TZINFO_TO_SQL để tải các bảng múi giờ. Ví dụ về các hệ thống như vậy là Linux, MacOS, FreeBSD và Solaris. Một vị trí có khả năng cho các tệp này là thư mục
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
0. Nếu hệ thống của bạn không có cơ sở dữ liệu ZoneInfo, bạn có thể sử dụng gói có thể tải xuống, như được mô tả sau trong phần này.zoneinfo database [the set of files describing time zones], use the
mysql_tzinfo_to_sql program to load the time zone tables. Examples of such systems are Linux, macOS, FreeBSD, and Solaris. One likely location for these files is the SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
0 directory. If your system has no zoneinfo database, you can use a downloadable package, as described later in this section. Để tải các bảng múi giờ từ dòng lệnh, hãy truyền tên đường dẫn thư mục ZoneInfo đến mysql_tzinfo_to_sql và gửi đầu ra vào chương trình MySQL. Ví dụ:mysql_tzinfo_to_sql and send the output into the mysql program. For example:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Lệnh MySQL hiển thị ở đây giả định rằng bạn kết nối với máy chủ bằng tài khoản như
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
1 có đặc quyền để sửa đổi các bảng trong lược đồ hệ thống SET time_zone = timezone;
8. Điều chỉnh các tham số kết nối theo yêu cầu.mysql command shown here assumes that you connect to the server using an account such as SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
1 that has privileges for modifying tables in the SET time_zone = timezone;
8 system schema. Adjust the connection parameters as required. mysql_tzinfo_to_sql đọc các tệp múi giờ của hệ thống của bạn và tạo các câu lệnh SQL từ chúng. MySQL xử lý các câu lệnh đó để tải các bảng múi giờ. reads your system's time zone files and generates SQL statements from them. mysql processes those statements to load the time zone tables.
mysql_tzinfo_to_sql cũng có thể được sử dụng để tải một tệp múi giờ duy nhất hoặc tạo thông tin thứ hai của bước nhảy vọt: also can be used to load a single time zone file or generate leap second information:
Để tải một tệp múi giờ duy nhất
3 tương ứng với tên múi giờSELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
4, gọi mysql_tzinfo_to_sql như thế này:mysql_tzinfo_to_sql like this:SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
0mysql> SET @@session.time_zone='+00:00'; Query OK, 0 rows affected [0.00 sec] mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | +00:00 | +--------------------+---------------------+ 1 row in set [0.00 sec]
Với phương pháp này, bạn phải thực thi một lệnh riêng để tải tệp múi giờ cho mỗi vùng được đặt tên mà máy chủ cần biết.
Nếu múi giờ của bạn phải tính đến các giây nhảy, hãy khởi tạo thông tin thứ hai như thế này, trong đó
3 là tên của tệp múi giờ của bạn:SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
1mysql> SET @@session.time_zone='+00:00'; Query OK, 0 rows affected [0.00 sec] mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | +00:00 | +--------------------+---------------------+ 1 row in set [0.00 sec]
Sau khi chạy mysql_tzinfo_to_sql, hãy khởi động lại máy chủ để nó không tiếp tục sử dụng bất kỳ dữ liệu múi giờ được lưu trong bộ đệm trước đó.mysql_tzinfo_to_sql, restart the server so that it does not continue to use any previously cached time zone data.
Nếu hệ thống của bạn không có cơ sở dữ liệu ZoneInfo [ví dụ: Windows], bạn có thể sử dụng gói chứa các câu lệnh SQL có sẵn để tải xuống tại Khu vực phát triển MySQL:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
2Cảnh báo
Không sử dụng gói múi giờ có thể tải xuống nếu hệ thống của bạn có cơ sở dữ liệu ZoneInfo. Thay vào đó, hãy sử dụng tiện ích mysql_tzinfo_to_sql. Mặt khác, bạn có thể gây ra sự khác biệt trong xử lý DateTime giữa MySQL và các ứng dụng khác trên hệ thống của bạn.not use a downloadable time zone package if your system has a zoneinfo database. Use the mysql_tzinfo_to_sql utility instead. Otherwise, you may cause a difference in datetime handling between MySQL and other applications on your system.
Để sử dụng gói múi giờ-statement SQL mà bạn đã tải xuống, giải nén nó, sau đó tải nội dung tệp chưa đóng gói vào các bảng múi giờ:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
3Sau đó khởi động lại máy chủ.
Cảnh báo
Không sử dụng gói múi giờ có thể tải xuống nếu hệ thống của bạn có cơ sở dữ liệu ZoneInfo. Thay vào đó, hãy sử dụng tiện ích mysql_tzinfo_to_sql. Mặt khác, bạn có thể gây ra sự khác biệt trong xử lý DateTime giữa MySQL và các ứng dụng khác trên hệ thống của bạn.not use a downloadable time zone package that contains
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
6 tables. That is intended for older MySQL versions. MySQL now uses SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
7 for the time zone tables.
Trying to replace them with SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
6 tables causes problems. Để sử dụng gói múi giờ-statement SQL mà bạn đã tải xuống, giải nén nó, sau đó tải nội dung tệp chưa đóng gói vào các bảng múi giờ:
Sau đó khởi động lại máy chủ.
Không sử dụng gói múi giờ có thể tải xuống có chứa bảng
6. Đó là dành cho các phiên bản MySQL cũ hơn. MySQL hiện sử dụngSELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
7 cho các bảng múi giờ. Cố gắng thay thế chúng bằng bảngSELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
6 gây ra vấn đề.SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
Giữ hiện tại với thay đổi múi giờmysqld startup, restart mysqld so that it uses the updated rules. Otherwise, mysqld might not notice when the system changes its time.
Khi các quy tắc múi giờ thay đổi, các ứng dụng sử dụng các quy tắc cũ trở nên lỗi thời. Để duy trì hiện tại, cần phải đảm bảo rằng hệ thống của bạn sử dụng thông tin múi giờ hiện tại được sử dụng. Đối với MySQL, có nhiều yếu tố cần xem xét trong hiện tại:
Thời gian hệ điều hành ảnh hưởng đến giá trị mà máy chủ MySQL sử dụng cho thời gian nếu múi giờ của nó được đặt thành
9. Đảm bảo rằng hệ điều hành của bạn đang sử dụng thông tin múi giờ mới nhất. Đối với hầu hết các hệ điều hành, bản cập nhật hoặc gói dịch vụ mới nhất chuẩn bị hệ thống của bạn cho các thay đổi thời gian. Kiểm tra trang web cho nhà cung cấp hệ điều hành của bạn để cập nhật giải quyết các thay đổi thời gian.[mysqld] **other variables** default_time_zone='+00:00'
Nếu bạn thay thế tệp múi giờ
0 của hệ thống bằng phiên bản sử dụng các quy tắc khác với các quy tắc có hiệu lực tại MySQLD Startup, hãy khởi động lại MySQLD để nó sử dụng các quy tắc được cập nhật. Nếu không, MySQLD có thể không nhận thấy khi hệ thống thay đổi thời gian.mysql> SET time_zone = 'UTC'; ERROR 1298 [HY000]: Unknown or incorrect time zone: 'UTC'
Nếu bạn sử dụng các múi giờ được đặt tên với MySQL, hãy đảm bảo rằng các bảng múi giờ trong cơ sở dữ liệu
8 đã được cập nhật:mysqld caches time zone information that it looks up, so after updating the time zone tables, restart mysqld to make sure that it does not continue to serve outdated time zone data.SET time_zone = timezone;
Nếu hệ thống của bạn có cơ sở dữ liệu ZoneInfo riêng, hãy tải lại các bảng múi giờ MySQL bất cứ khi nào cơ sở dữ liệu ZoneInfo được cập nhật.
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
4Đối với các hệ thống không có cơ sở dữ liệu ZoneInfo của riêng họ, hãy kiểm tra Khu vực phát triển MySQL để cập nhật. Khi có sẵn một bản cập nhật mới, hãy tải xuống và sử dụng nó để thay thế nội dung của các bảng múi giờ hiện tại của bạn.
Để kiểm tra xem cài đặt MySQL của bạn có được cập nhật đúng cách để thay đổi quy tắc thời gian tiết kiệm ánh sáng ban ngày hay không, hãy sử dụng thử nghiệm như sau. Ví dụ sử dụng các giá trị phù hợp với thay đổi DST 1 giờ năm 2007 xảy ra ở Hoa Kỳ vào ngày 11 tháng 3 lúc 2 giờ sáng.
Bài kiểm tra sử dụng truy vấn này:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
5Hai giá trị thời gian cho biết thời gian thay đổi DST xảy ra và việc sử dụng các múi giờ được đặt tên yêu cầu sử dụng các bảng múi giờ. Kết quả mong muốn là cả hai truy vấn đều trả về cùng một kết quả [thời gian đầu vào, được chuyển đổi thành giá trị tương đương trong múi giờ 'Hoa Kỳ/Trung tâm'].
Trước khi cập nhật các bảng múi giờ, bạn sẽ thấy một kết quả không chính xác như thế này:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
6Sau khi cập nhật các bảng, bạn sẽ thấy kết quả chính xác:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
7Múi giờ nhảy vọt thứ hai hỗ trợ
Giá trị thứ hai của Leap được trả về với một phần thời gian kết thúc bằng
mysql> SET time_zone = 'UTC';
ERROR 1298 [HY000]: Unknown or incorrect time zone: 'UTC'
2. Điều này có nghĩa là một hàm như mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
5 có thể trả về cùng giá trị trong hai hoặc ba giây liên tiếp trong lần nhảy thứ hai. Vẫn đúng là các giá trị thời gian theo nghĩa đen có phần thời gian kết thúc bằng mysql> SET time_zone = 'UTC';
ERROR 1298 [HY000]: Unknown or incorrect time zone: 'UTC'
4 hoặc mysql> SET time_zone = 'UTC';
ERROR 1298 [HY000]: Unknown or incorrect time zone: 'UTC'
5 được coi là không hợp lệ.Nếu cần phải tìm kiếm các giá trị
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
7 một giây trước khi bước nhảy thứ hai, có thể thu được kết quả dị thường nếu bạn sử dụng so sánh với các giá trị mysql> SET time_zone = 'UTC';
ERROR 1298 [HY000]: Unknown or incorrect time zone: 'UTC'
7 '. Ví dụ sau đây chứng minh điều này. Nó thay đổi múi giờ phiên thành UTC vì vậy không có sự khác biệt giữa các giá trị mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
mysql> SELECT CURRENT_TIMESTAMP[];
+---------------------+
| CURRENT_TIMESTAMP[] |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set [0.01 sec]
7 bên trong [có trong UTC] và các giá trị được hiển thị [có hiệu chỉnh múi giờ được áp dụng].mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
8Để làm việc xung quanh điều này, bạn có thể sử dụng một so sánh dựa trên giá trị UTC thực sự được lưu trữ trong cột, có hiệu chỉnh thứ hai bước nhảy vọt:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set [0.00 sec]
9