@Smita V, truy vấn không hiệu quả mà bạn giới thiệu chỉ vì bạn đang áp dụng hàm chuyển đổi không chính xác cho mỗi hàng trong bảng, nơi bạn nên áp dụng nó cho chính điều kiện. Vì vậy, thay vì
select col1,col2,colUnixdatetime from table where From_Unixtime(colUnixdatetime) between wtvdate1 and wtvdate2
, chuyển đổi mọi hàng trên bàn để so sánh mọi hàng trên bảng so với ngày bạn có. Bạn nên sử dụng
select col1,col2,colUnixdatetime from table where colUnixdatetime between UNIX_TIMESTAMP(wtvdate1) and UNIX_TIMESTAMP(wtvdate2).
Làm theo cách này S W sử dụng chỉ mục bảng thích hợp.
@treznik cách đây một lúc tôi đã chuyển từ số nguyên uts sang kiểu dữ liệu datetime hoặc dấu thời gian, vì những lý do đã đề cập ở trên, dễ đọc và thao tác hơn nhiều.). Tuy nhiên tôi đã gần đây đã bắt đầu suy nghĩ lại về cách tiếp cận này vì hai lý do:
- Không có vị trí múi giờ được lưu trữ, vì vậy bạn suy luận múi giờ dựa trên vị trí của bạn. Điều này có thể hoặc không có thể là một vấn đề cho bạn.
- Nó bỏ qua thời gian tiết kiệm ánh sáng ban ngày. Vì vậy, khi đồng hồ quay trở lại lúc 2 giờ sáng, bạn sẽ nhận được 1:30 sáng hai lần và nói rằng 2011-10-30 01:30 không cho bạn biết điều này, trong khi 1319938200 có. Tôi không nghĩ rằng có một cách bản địa trong mysql để lưu trữ ngày bao gồm cả múi giờ, ngoại trừ một chuỗi (2011-10-30 01:30 BST).
Tôi vẫn đang cố gắng tìm ra câu trả lời cho chính bản thân mình.
Tôi đã chỉnh sửa. :) – treznik
Tôi không đồng ý. Kiểm tra câu trả lời của tôi. – coderama
Trường DATETIME của MySQL thiếu múi giờ - luôn lưu trữ ngày trong UTC (tức là tránh NOW() - sử dụng UTC_TIMESTAMP()) nếu không bạn sẽ gặp rắc rối lớn khi cố gắng quốc tế hóa ứng dụng của mình và thay đổi lý do * múi giờ máy chủ của bạn. – jmc