... Đây rõ ràng là thực hiện một 'chuỗi' so
Không - nếu định dạng ngày/giờ phù hợp với định dạng được hỗ trợ, MySQL thực hiện chuyển đổi ngầm để chuyển đổi các giá trị cho một DATETIME , dựa trên cột mà nó đang được so sánh. Điều tương tự cũng xảy ra với:
WHERE int_column = '1'
... nơi chuỗi giá trị của "1" được chuyển thành một số nguyên vì kiểu dữ liệu int_column
's là INT, không CHAR/VARCHAR/TEXT.
Nếu bạn muốn chuyển đổi một cách rõ ràng chuỗi đến một DATETIME, các STR_TO_DATE function sẽ là sự lựa chọn tốt nhất:
WHERE expires_at <= STR_TO_DATE('2010-10-15 10:00:00', '%Y-%m-%d %H:%i:%s')
Nguồn
2010-10-21 15:57:22
Nếu máy chủ hoặc các chuỗi của bạn không trong UTC hãy cẩn thận khi chuyển đổi ngầm xảy ra với múi giờ máy chủ/phiên không phải là múi giờ của giá trị mà nó đang được so sánh. Vì vậy, chuỗi là cùng một múi giờ địa phương ngay cả khi bạn so sánh nó với UTC_TIMESTAMP(). – ClearCrescendo
@ClearCrescendo: Điểm tốt, thx. –