MySQL có hỗ trợ dấu thời gian không?

Nếu bạn đã từng làm việc với MySQL và phải tạo cấu trúc bảng của mình, bạn có thể nhận thấy rằng kiểu dữ liệu

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1 và
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2 thoạt nhìn khá giống nhau vì chúng có rất nhiều điểm tương đồng.

Trong hướng dẫn này, chúng tôi sẽ xem xét từng loại và tìm hiểu sự khác biệt chính giữa cả hai để bạn có thể biết khi nào nên sử dụng chúng.

https. // stackoverflow. com/câu hỏi/409286/nên-tôi-sử-dụng-thời-thời-gian-hoặc-dấu-thời-gian-dữ-liệu-loại-trong-mysql

INSERT INTO demo_table VALUES ((NOW()),(NOW())); 1

Loại

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1 được sử dụng cho các giá trị chứa cả ngày và giờ

Ví dụ khi lấy giá trị về thì MySQL sẽ hiển thị theo dạng sau.

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1

Một điểm khác biệt quan trọng là phạm vi hiện được hỗ trợ là

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2 đến
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
3

Bạn có thể coi

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1 là một giá trị theo nghĩa đen, vì nó lưu trữ ngày và giờ nhưng không có tham chiếu đến một múi giờ cụ thể. Vì vậy, khi bạn lưu trữ giá trị của
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
5 chẳng hạn, múi giờ của máy chủ sẽ được sử dụng. Sau khi được chèn, giá trị của
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1 sẽ giữ nguyên bất kể bất kỳ phiên hiện tại nào

Đây là một sự khác biệt quan trọng sẽ rõ ràng hơn một chút khi bạn xem qua ví dụ bên dưới

INSERT INTO demo_table VALUES ((NOW()),(NOW())); 2

Giống như

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1, kiểu dữ liệu
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2 chứa cả ngày và giờ ở định dạng sau
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1

🤩 Nhà tài trợ tuyệt vời của chúng tôi 👇

MySQL có hỗ trợ dấu thời gian không?
Xem trang web

DigitalOcean cung cấp giải pháp lưu trữ đám mây đơn giản và đáng tin cậy cho phép các nhà phát triển nhanh chóng thiết lập và chạy trang web hoặc ứng dụng của họ

MySQL có hỗ trợ dấu thời gian không?
Xem trang web

Bảng công việc chính thức của Laravel. Tìm các nhà phát triển Laravel giỏi nhất và tài năng nhất bằng cách đăng công việc của bạn trên bảng việc làm chính thức của Laravel

MySQL có hỗ trợ dấu thời gian không?
Xem trang web

Nói "xin chào" với Zigi - trợ lý quy trình làm việc dựa trên Slack của bạn, trợ lý này chỉ gửi cho bạn những thay đổi liên quan đến Jira & GitHub, tiết kiệm thời gian cho PR, v.v. Tìm hiểu thêm về chương trình tài trợ DevDojo và xem biểu trưng của bạn tại đây để đưa thương hiệu của bạn đến với hàng nghìn nhà phát triển.

Tuy nhiên, không giống như

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
1, loại dữ liệu
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2 có phạm vi cố định trong khoảng từ
SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 17:42:16 |
+---------------------+---------------------+
3 UTC đến
SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 17:42:16 |
+---------------------+---------------------+
4 UTC. Bạn phải luôn xem xét giới hạn này vì giới hạn này có thể không phù hợp với mọi ứng dụng và trường hợp sử dụng. Để biết thêm thông tin về lý do tại sao phạm vi cụ thể này, hãy đảm bảo đọc thêm về Thời gian Unix

Một điều quan trọng cần lưu ý là khi bạn hiển thị các giá trị của cột

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2, chúng sẽ được chuyển đổi thành múi giờ hiện tại. Điều xảy ra là MySQL sẽ chuyển đổi các giá trị
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2 từ múi giờ hiện tại thành
SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 17:42:16 |
+---------------------+---------------------+
7 khi lưu trữ chúng, nhưng sau đó nó sẽ chuyển đổi các giá trị ngược lại từ UTC sang múi giờ hiện tại của truy xuất

Hãy xem qua ví dụ sau để làm cho điều này rõ ràng hơn một chút

Ví dụ

Hãy tạo một bảng rất đơn giản chỉ với hai cột cho mỗi một trong hai kiểu dữ liệu

________số 8

Sau đó, hãy chèn các giá trị giống nhau vào cả hai bằng cách sử dụng

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
5

INSERT INTO demo_table VALUES ((NOW()),(NOW()));

Sau đó kiểm tra các giá trị của cả hai cột

SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 17:42:16 |
+---------------------+---------------------+

Cho đến nay các giá trị của cả hai cột đều giống nhau. Nhưng sau đó hãy kiểm tra múi giờ hiện tại

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
2

Tiếp theo, hãy thay đổi múi giờ cho phiên làm việc hiện tại của chúng ta

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
3

Ghi chú. nếu bạn gặp lỗi sau.

SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 17:42:16 |
+---------------------+---------------------+
9 bạn có thể chạy lệnh sau trong một cửa sổ đầu cuối khác

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
5

Sau đó, hãy xem các giá trị đầu ra thay đổi như thế nào

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
6

Như bạn có thể thấy, giá trị hiển thị của

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
20 vẫn giữ nguyên nhưng giá trị
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
21 đã thay đổi và hiện đang tham chiếu múi giờ hiện tại của chúng tôi

Phần kết luận

Đây là tất cả. Bây giờ bạn nên hiểu rõ hơn về sự khác biệt chính giữa

INSERT INTO demo_table VALUES ((NOW()),(NOW()));
22 và
INSERT INTO demo_table VALUES ((NOW()),(NOW()));
23 là gì

Trong trường hợp bạn muốn tìm hiểu thêm về SQL nói chung, tôi khuyên bạn nên sử dụng Sách điện tử miễn phí sau đây

  • Giới thiệu về Sách điện tử mã nguồn mở SQL

Trong trường hợp bạn đang sử dụng SQL hàng ngày và đang tìm cách giảm đáng kể độ trễ của phân tích dữ liệu, hãy nhớ sử dụng Materialize

MySQL có hỗ trợ dấu thời gian không?

Materialize là Cơ sở dữ liệu phát trực tuyến cho Phân tích thời gian thực. Nó là một cơ sở dữ liệu phản ứng cung cấp các bản cập nhật chế độ xem gia tăng và nó giúp các nhà phát triển dễ dàng xây dựng bằng cách truyền dữ liệu bằng cách sử dụng SQL tiêu chuẩn

Làm cách nào để sử dụng dấu thời gian trong MySQL?

Để chứng minh, trước tiên hãy tạo một bảng có tên là Mẫu với sample_ts là trường DẤU THỜI GIAN. TẠO BẢNG Mẫu ( sample_id int NOT NULL, sample_name VARCHAR(20), sample_ts TIMESTAMP ); Tiếp theo, bạn phải đặt múi giờ thành '+00. 00' UTC bằng cách ban hành lệnh SET time_zone. ĐẶT TIME_ZONE = '+00. 00';

Làm cách nào để lưu trữ dấu thời gian trong MySQL?

ALTER TABLE yourTableName ADD yourColumnName datetime DEFAULT CURRENT_TIMESTAMP ; . Cách tiếp cận đầu tiên như sau. Nếu bạn không chuyển bất kỳ tham số nào cho cột 'CreationDate', MySQL theo mặc định sẽ lưu dấu thời gian hiện tại.

Làm cách nào để chèn dấu thời gian vào bảng MySQL?

Khi bảng MySQL được tạo, chỉ cần làm điều này. .
chọn DẤU THỜI GIAN làm loại cột của bạn
đặt giá trị Mặc định thành CURRENT_TIMESTAMP
sau đó chỉ cần chèn bất kỳ hàng nào vào bảng mà không cần chèn bất kỳ giá trị nào cho cột thời gian

Làm cách nào để hiển thị dấu thời gian trong SQL?

Hàm CURRENT_TIMESTAMP trả về ngày và giờ hiện tại, theo định dạng 'YYYY-MM-DD hh. mm. ss. định dạng mmm'. Mẹo. Ngoài ra, hãy xem hàm GETDATE().