Khi trả về ngày / giờ hiện tại trong MySQL, bạn có thể chọn một loạt các hàm. Hầu hết chúng chỉ đơn giản là từ đồng nghĩa với một chức năng khác.
Tuy nhiên, có hai chức năng trông có vẻ giống nhau, nhưng thực tế lại hơi khác một chút. Các hàm mà tôi đang đề cập đến là SYSDATE()
và NOW()
.
Sự khác biệt giữa SYSDATE () và NOW ()
Cả hai hàm đều trả về ngày và giờ hiện tại. Tuy nhiên, chúng khác nhau ở điểm nào:
-
SYSDATE()
trả về thời gian mà nó thực thi. -
NOW()
trả về một thời gian không đổi cho biết thời gian tại đó câu lệnh bắt đầu thực hiện. -
SET TIMESTAMP
câu lệnh ảnh hưởng đến giá trị được trả về bởiNOW()
nhưng không phải bởiSYSDATE()
.
Vì vậy, trong nhiều trường hợp, bạn có thể sẽ nhận được cùng một kết quả bất kể bạn sử dụng chức năng nào. Tuy nhiên, nếu câu lệnh của bạn phức tạp hơn và mất một lúc để chạy, bạn có thể nhận được sự chênh lệch khá lớn trong giá trị trả về tùy thuộc vào hàm bạn sử dụng.
Ví dụ
Dưới đây là một ví dụ để chứng minh giá trị trả về có thể thay đổi như thế nào, tùy thuộc vào chức năng bạn sử dụng.
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
Kết quả:
+---------------------+---+---------------------+---------------------+---+---------------------+ | SYSDATE() | | SYSDATE() | NOW() | | NOW() | +---------------------+---+---------------------+---------------------+---+---------------------+ | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:36 | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:26 | +---------------------+---+---------------------+---------------------+---+---------------------+
Vì vậy, trong ví dụ này, tôi chạy SYSDATE()
hai lần, nhưng có khoảng dừng 10 giây ở giữa. Sau đó, tôi làm điều tương tự với NOW()
.
Như mong đợi, 10 giây tạm dừng ảnh hưởng đến giá trị trả về của SYSDATE()
thứ hai nhưng không phải NOW()
thứ hai . Trên thực tế, các giá trị cho cả hai trường hợp của NOW()
giống như đối với phiên bản đầu tiên của SYSDATE()
, đó là khi câu lệnh bắt đầu chạy.
Đặt SYSDATE () làm Bí danh cho NOW ()
Nếu sự khác biệt giữa hai hàm này gây ra sự cố cho bạn, bạn thực sự có tùy chọn tạo SYSDATE()
bí danh cho NOW()
.
Để thực hiện việc này, hãy sử dụng --sysdate-is-now
tùy chọn lệnh máy chủ. Để biết thêm thông tin, hãy xem –sysdate-is-now trên trang web tài liệu MySQL.