2010-11-08 28 views
25

Tôi nên sử dụng loại dữ liệu nào để tiết kiệm unix_timestamp Giá trị (MySQL)?Loại dữ liệu cho unix_timestamp (MySQL) là gì?

+4

http://dev.mysql.com/doc/refman/5.0/en/datetime.html – teemitzitrone

+0

Dấu thời gian có giống như unix_timestamp không? – jzarsuelo

+0

@ user239431: UNIX_TIMESTAMP là một hàm MySQL: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_unix-timestamp –

Trả lời

33

kiểu là số nguyên như:

int(11) 

là tốt cho chỉ mục và điều kiện như > < =

+14

Nếu bạn sử dụng INT, bạn cần nhớ phiên bản đã ký chỉ đi từ -2147483648 đến 2147483647, giới hạn trên sẽ kích hoạt lỗi [năm 2038] (http://en.wikipedia.org/wiki/Year_2038_problem). Bạn có thể sử dụng INT (11) UNSIGNED hoặc BIGINT - có [một số cảnh báo] (http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html) với sau nhưng nó [ khổng lồ] (http://en.wikipedia.org/wiki/Integer_ (computer_science)). Cá nhân tôi cảm thấy an toàn hơn với các chức năng sẵn có của MySQL nhưng chức năng lập chỉ mục và so sánh các tập dữ liệu lớn có thể ảnh hưởng đến bạn. –

+0

Đối với hậu thế tôi +1 bình luận của William Turrell. UNSIGNED INT sẽ là cách để đi từ quan điểm của tôi, nhưng câu trả lời đúng nhất sẽ phụ thuộc vào ngôn ngữ bạn đang kéo thông tin cơ sở dữ liệu vào (nếu mã hóa từ đầu). Ví dụ: nếu bạn là một cửa hàng Java UNSIGNED INT bản đồ đến một java.lang.Long (xem bảng 5.2 ở đây cho người dùng MySQL + Java: https://dev.mysql.com/doc/connector-j/en/connector-j -reference-type-conversions.html). Bằng cách này bạn tiết kiệm một số không gian trong DB trong khi bảo đảm bạn không viết mã mà sẽ nhấn một lỗi vào năm 2038. Great điểm @ WilliamTurrell. –

+0

Về lỗi 2038, sẽ không tăng số 11 trong 'int (11)' lên 12 hoặc 13 là biện pháp hợp lý để tránh tình huống? –

10

Bạn muốn sử dụng TIMESTAMP data type.
Nó được lưu trữ dưới dạng giá trị epoch, nhưng MySQL hiển thị giá trị là 'YYYY-MM-DD HH: MM: SS'.

Các vấn đề liên quan