Dấu thời gian của MySQL :
Được lưu trữ trong UTC
Chúng được chuyển đổi thành UTC trên bộ lưu trữ và được chuyển đổi trở lại múi giờ của bạn khi truy xuất. Nếu bạn thay đổi cài đặt múi giờ , các giá trị được truy xuất cũng thay đổi.
Có thể tự động khởi tạo và cập nhật
Bạn có thể đặt giá trị mặc định của chúng và / hoặc giá trị cập nhật tự động thành CURRENT_TIMESTAMP
Có một phạm vi 1970-01-01 00:00:01 UTC
để2038-01-19 03:14:07 UTC
Trong khi đó, datetime của MySQL :
Những gì bạn lưu trữ là những gì bạn nhận được ™.
Có một phạm vi 1000-01-01 00:00:00
để9999-12-31 23:59:59
Các giá trị ngoài phạm vi có thể hoạt động - nhưng chỉ các giá trị trong phạm vi được đảm bảo hoạt động.
Bạn có thể lưu trữ ngày mà ngày hoặc tháng bằng không.
Đây là cách lưu trữ sinh nhật của MySQL! Bạn không thể làm điều đó với a TIMESTAMP
, với ngoại lệ duy nhất là giá trị 0 của 0000-00-00
.
Bạn có thể lưu trữ ngày không hợp lệ, nếu bạn cần chúng, trong chế độ ALLOW_INVALID_DATE .
Bạn có thể đặt giá trị mặc định NOW()
trong một số trường hợp, nhưng cách tự động và ngày cập nhật tự động hơn và tự nhiên hơn là TIMESTAMP
.
Và tất nhiên cũng có DATE
và TIME
, hoạt động giống như vậy DATETIME
, nhưng tất nhiên DATE
không quan tâm đến thời gian và TIME
không quan tâm đến ngày. Tất cả bốn loại dữ liệu hoạt động hoàn hảo với một loạt các hàm ngày và thời gian , nhưng khi bạn trộn các loại dữ liệu, bạn nên biết về các hiệu ứng chuyển đổi .
Bây giờ, cho câu hỏi của bạn: Bạn nên sử dụng DATETIME
ở mọi nơi. Không phải vì lý do kỹ thuật, nhưng vì bạn vẫn chưa rõ về cách thức hoạt động của MySQL, DATETIME
nên sự lựa chọn đơn giản hơn. Điều này có nghĩa là bạn sẽ phải tính toán dấu thời gian hiện tại trong PHP trước khi lưu trữ, điều đó dễ như:
$mysqldate = date("Y-m-d H:i:s");
Hàm ngày của PHP hoạt động như sau:
string date ( string $format [, int $timestamp = time() ] )
Các "Y-m-d H:i:s"
định dạng là một trong những phù hợp với MySQL và bằng cách để lại tham số thứ hai trống rỗng, date()
gọi time()
để có được những hiện UNIX timestamp .
Sử dụng TIMESTAMP
thay vì a DATETIME
có giá trị gia tăng của MySQL đảm nhận trách nhiệm quyết định dấu thời gian hiện tại và bạn có thể bỏ qua trường khi bạn đang chèn / cập nhật. Nhưng vì bạn đã gửi một truy vấn và mã để lấy dấu thời gian hiện tại trong PHP là tối thiểu, bạn có thể đi theo DATETIME
mọi thứ một cách an toàn .
Đối với mã thực tế để lưu dấu thời gian PHP vào cơ sở dữ liệu, bạn nên xem các Đối tượng dữ liệu PHP và nếu bạn vẫn chưa rõ ràng, hãy hỏi StackOverflow thay thế. Nhưng đã có gần 1,5k câu hỏi liên quan rồi, hãy chắc chắn rằng bạn lướt qua chúng trước khi hỏi. Chỉ cần một gợi ý, tuyên bố chuẩn bị là cách những đứa trẻ mát mẻ làm điều đó.