Supponiamo che io ho due tabelle in questo modo:MySQL Join/confronto su una colonna 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)
E 'sicuro, per esempio, elencare tutti gli eventi e la loro posizione se sono utilizzando il campo Time
come criterio di adesione? Cioè .:
SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time
O, anche semplicemente confrontando il valore datetime (tenendo conto che il valore parametrizzato può contenere il secondi frazionaria parte - che MySQL ha sempre accettato) esempio
SELECT E.* FROM Events E WHERE E.Time = @Time
Capisco MySQL (prima della versione 5.6.4) memorizza solo campi datetime SENZA millisecondi. Quindi assumerei che questa query funzionerebbe correttamente. Tuttavia, dalla versione 5.6.4, ho letto che MySQL ora può memorizzare millisecondi con il campo datetime.
Supponendo valori datetime vengono inseriti tramite le funzioni come NOW()
, i millisecondi vengono troncati (< 5.6.4) che Supporrei consentire query precedente per funzionare. Tuttavia, con la versione 5.6.4 e successive, questo potrebbe NON funzionare. Sono, e sarò interessato solo alla seconda accuratezza.
Se qualcuno potesse rispondere alle seguenti domande sarebbe molto apprezzato:
- In generale, come fa MySQL confrontare i campi datetime uno contro l'altro (si pensi query precedente).
- La query di cui sopra va bene e utilizza gli indici nei campi ? (MySQL 5.6.4)
- Esiste un modo per escludere i millisecondi? Cioè quando si inserisce e in join/select condizionali ecc.? (MySQL> 5.6.4)
- La query di partecipazione sopra funzionerà? (MySQL> 5.6.4)
EDIT
so di poter lanciare i datetimes, grazie per coloro che hanno risposto, ma sto cercando di affrontare la radice del problema qui (il fatto che il tipo di archiviazione/definizione è stata cambiata) e io NON voglio utilizzare le funzioni nelle mie query. Ciò nega tutto il mio lavoro di ottimizzazione delle query che applicano gli indici ecc., Per non parlare del dover riscrivere tutte le mie query.
EDIT2
qualcuno là fuori può suggerire un motivo per non unirsi su un campo DATETIME
utilizzando secondo la precisione?
bene per la terza domanda Usa questa data (time_column) questo farà il trucco –
credo 'NOW()' in 5.6.4 o successiva non tiene in millisecondi a meno che non si passa in un parametro (0-6) che indica "* precisione frazionaria dei secondi *", quindi dovresti stare bene per l'unione finché non passi i parametri a 'NOW()' Altro [qui] (http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_now) –
quale fuso orario viene utilizzato per DATETIME, dose che il fuso orario ha "salti", come http: // stackoverflow .com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result –