Mysql
 sql >> Database >  >> RDS >> Mysql

Combinazione illegale di regole di confronto per operazioni di confronto data/ora

  1. Come spiegato nella voce manuale per DATE_ADD() :

    Nel tuo caso, perché table1.tim è un TIME valore, la funzione restituisce una stringa.

    La stringa viene restituita nel set di caratteri e nelle regole di confronto fornite da character_set_connection e collation_connection .

  2. 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?).

  3. 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