Соединение/сравнение MySQL в столбце DATETIME (<5.6.4 и > 5.6.4)

Предположим, у меня есть две таблицы, подобные этой:

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 и позже, это потенциально может НЕ сработать. Я есть, и только когда-нибудь буду интересоваться второй точностью.

Если бы кто-нибудь мог ответить на следующие вопросы, я был бы очень признателен:

  1. В общем, как MySQL сравнивает поля даты и времени друг с другом (рассмотрим приведенный выше запрос).
  2. Подходит ли приведенный выше запрос и использует ли он индексы по времени Поля? (MySQL < 5.6.4)
  3. Есть ли способ исключить миллисекунды? Т.е. при вставке и в условные соединения/выборы и т.д.? (MySQL > 5.6.4)
  4. Будет ли работать приведенный выше запрос на соединение? (MySQL > 5.6.4)

EDIT

Я знаю, что могу привести время даты, спасибо за те, кто ответил, но я пытаюсь решить корень проблемы здесь (тот факт, что тип хранилища / определение были изменены), и я НЕ хочу использовать функции в своих запросах. Это сводит на нет всю мою работу по оптимизации запросов с применением индексов и т. Д., Не говоря уже о необходимости переписывать все мои запросы.

EDIT2

Может ли кто-нибудь предложить причину НЕ присоединяться к полю DATETIME, используя вторую точность?

8
задан Simon 4 July 2012 в 09:10
поделиться