-
Come spiegato nella voce manuale per
DATE_ADD()
:Nel tuo caso, perché
table1.tim
è unTIME
valore, la funzione restituisce una stringa.La stringa viene restituita nel set di caratteri e nelle regole di confronto fornite da
character_set_connection
ecollation_connection
. -
Come spiegato nella voce manuale per
TIME()
:La stringa viene restituita come stringa binaria (perché non utilizzare il set di caratteri di connessione e le regole di confronto è al di là di me, forse un bug?).
-
Come spiegato nella voce del manuale per Digitare la conversione nella valutazione dell'espressione :
Pertanto il confronto intrapreso è un confronto di stringhe, ma il
binary
la stringa non può essere forzata a un confronto appropriato per il confronto (poiché la sua codifica non è nota). Da qui l'errore a cui stai assistendo.
Si potrebbe forzare il confronto a essere condotto correttamente mediante casting
uno o entrambi gli operandi, ma sarei tentato di rielaborare la clausola in modo che la conversione avvenga implicitamente dal confronto con un TIME
digita:
TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim