Załóżmy, że mam dwie tabele tak:MySQL Dołącz/Porównanie na kolumnie DATETIME (<5.6.4 and > 5.6.4)
Events
ID (PK int autoInc), Time (datetime), Caption (varchar)
Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)
Czy jest bezpiecznie, na przykład listę wszystkich zdarzeń i ich położenie, czy jestem przy użyciu pola Time
jako moich kryteriów łączenia? Tj .:
SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time
OR, nawet po prostu porównując wartości datetime (biorąc pod uwagę, że wartość parametryzowane mogą zawierać ułamkową część sekundy - co MySQL zawsze akceptowane), na przykład
SELECT E.* FROM Events E WHERE E.Time = @Time
Rozumiem MySQL (przed wersją 5.6.4) wyłącznie magazynuje datetime pola BEZ milisekund. Zakładam więc, że to zapytanie będzie działać poprawnie. Jednak od wersji 5.6.4 czytałem, że MySQL może teraz przechowywać milisekundy w polu datetime.
Zakładając, że wartości datetime są wstawiane za pomocą funkcji, takich jak NOW()
, milisekundy są obcięte (< 5.6.4), co mógłbym założyć, aby powyższe zapytanie zadziałało. Jednak w wersji 5.6.4 i nowszych może to NIE działać. Jestem i zawsze będę zainteresowany drugą dokładnością.
Jeśli ktoś mógłby odpowiedzieć na następujące pytania będą bardzo mile widziane:
- w ogólności, w jaki sposób MySQL porównać pola datetime przed sobą (pod powyższe zapytanie).
- Czy powyższe zapytanie jest prawidłowe i czy korzysta z indeksów w polach o czasie ? (MySQL < 5.6.4)
- Czy istnieje sposób na wyłączenie milisekund? To znaczy. podczas wstawiania i w warunkowych sprzężeniach/wybiera itp.? (MySQL> 5.6.4)
- Czy powyższe zapytanie o łączenie działa? (MySQL> 5.6.4)
EDIT
Wiem, że może rzucić się datetimes, dzięki za te, które odpowiedziało, ale próbuję zmierzyć się z korzenia problem tutaj (fakt, że typ/definicja pamięci został zmieniony) i NIE chcę używać funkcji w moich zapytaniach. To neguje całą moją pracę polegającą na optymalizowaniu zapytań z zastosowaniem indeksów itp., Nie wspominając o konieczności przepisywania wszystkich moich zapytań.
EDIT2
Może ktoś tam sugerują powodu, aby nie dołączyć na DATETIME
dziedzinie z wykorzystaniem drugiego dokładność?
dobrze wykorzystać swoją trzecia kwestia to data (time_column) to załatwi –
wierzę 'NOW()' w 5.6.4 lub nowszy nie będzie czynnikiem w milisekundach chyba zdać w parametrze (0-6) wskazującym "* precyzja sekund ułamkowych *", więc powinieneś być w porządku dla łączenia tak długo, jak długo nie przekazujesz parametrów do 'TERAZ()' Więcej [tutaj] (http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_now) –
jaka strefa czasowa jest używana dla DATETIME, dawka, której strefa czasowa ma "skoki", jak http: // stackoverflow .com/questions/6841333/why-is-odejmowanie-ten-dwa-w-1927-dając-dziwny-wynik –