Câu trả lời là:Nó phụ thuộc.
Tổng cộng cơ sở dữ liệu của bạn có ba múi giờ
- Múi giờ phiên của bạn:
SESSIONTIMEZONE
Điều này bạn có thể thay đổi bằng ALTER SESSION SET TIME_ZONE=...
bất cứ lúc nào. Nó có liên quan đến kết quả của
-
CURRENT_DATE
-
LOCALTIMESTAMP
-
CURRENT_TIMESTAMP
Đây cũng là múi giờ mục tiêu khi bạn thực hiện CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)
SESSIONTIMEZONE
mặc định có thể được đặt bởi biến môi trường ORA_SDTZ
hoặc (trên Windows) bằng mục đăng ký HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(đối với Máy khách 32 bit), tương ứng. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(dành cho Máy khách 64 bit).
- Múi giờ cơ sở dữ liệu:
DBTIMEZONE
Thực ra điều này không quá quan trọng trong việc sử dụng hàng ngày, nó chỉ phù hợp với TIMESTAMP WITH LOCAL TIME ZONE
cột kiểu dữ liệu và xác định định dạng lưu trữ.
Đây là KHÔNG múi giờ của SYSDATE
hoặc SYSTIMESTAMP
!!!
Bạn không thể thay đổi DBTIMEZONE
trên cơ sở dữ liệu của bạn nếu cơ sở dữ liệu chứa một bảng có TIMESTAMP WITH LOCAL TIME ZONE
cột và cột chứa dữ liệu. Nếu không, nó có thể được thay đổi bằng ALTER DATABASE SET TIME_ZONE='...';
. Thay đổi không có hiệu lực cho đến khi cơ sở dữ liệu được tắt và khởi động lại.
DBTIMEZONE
được đặt khi cơ sở dữ liệu được tạo. Nếu không có múi giờ nào được cung cấp trong khi tạo cơ sở dữ liệu thì Oracle sẽ mặc định là múi giờ của hệ điều hành máy chủ.
- Múi giờ của hệ điều hành của máy chủ cơ sở dữ liệu:
Múi giờ này có liên quan đến kết quả của
-
SYSDATE
-
SYSTIMESTAMP
Đương nhiên múi giờ này không thể thay đổi trên cấp độ cơ sở dữ liệu. Trong trường hợp quốc gia của bạn sử dụng Giờ tiết kiệm ánh sáng ban ngày, múi giờ này có thể thay đổi hai lần một năm. Bạn có thể thẩm vấn nó bằng SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual;
, chẳng hạn.
Vì vậy, nếu Hệ điều hành máy chủ DB của bạn được thiết lập đúng cách, thì bạn sẽ có thời gian mùa hè từ tuần sau trở đi (ít nhất là đối với Châu Âu)