Предположим, у меня есть две таблицы, подобные этой:
Events
ID (PK int autoInc), Time (datetime), Caption (varchar)
Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)
Безопасно ли, например, перечислять все события и их положение, если я использую поле Time
в качестве критерия соединения? Т.е.:
SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time
ИЛИ, даже просто сравнивая значение даты и времени (принимая во внимание, что параметризованное значение может содержать дробную секундную часть - которую MySQL всегда принимал), например,
SELECT E.* FROM Events E WHERE E.Time = @Time
Я понимаю, что MySQL (до версии 5.6.4) хранит только поля даты и времени БЕЗ миллисекунд. Поэтому я бы предположил, что этот запрос будет работать нормально. Однако, начиная с версии 5.6.4, я прочитал, что MySQL теперь может хранить миллисекунды с полем datetime.
Предполагая, что значения даты и времени вставляются с помощью таких функций, как NOW()
, миллисекунды усечены (<5.6.4), что, как я предполагаю, позволяет работать приведенному выше запросу. Однако с версией 5.6.4 и позже, это потенциально может НЕ сработать. Я есть, и только когда-нибудь буду интересоваться второй точностью.
Если бы кто-нибудь мог ответить на следующие вопросы, я был бы очень признателен:
EDIT
Я знаю, что могу привести время даты, спасибо за те, кто ответил, но я пытаюсь решить корень проблемы здесь (тот факт, что тип хранилища / определение были изменены), и я НЕ хочу использовать функции в своих запросах. Это сводит на нет всю мою работу по оптимизации запросов с применением индексов и т. Д., Не говоря уже о необходимости переписывать все мои запросы.
EDIT2
Может ли кто-нибудь предложить причину НЕ присоединяться к полю DATETIME
, используя вторую точность?