-
Jak je vysvětleno v ručním zadání pro
DATE_ADD()
:Ve vašem případě, protože
table1.tim
jeTIME
hodnota, funkce vrací řetězec.Řetězec je vrácen ve znakové sadě a řazení dané
character_set_connection
acollation_connection
. -
Jak je vysvětleno v ručním zadání pro
TIME()
:Řetězec je vrácen jako binární řetězec (proč nepoužít znakovou sadu pro připojení a řazení je mimo mě – možná chyba?).
-
Jak je vysvětleno v ručním zadání pro Převod typů ve vyhodnocení výrazů :
Prováděné porovnání je tedy řetězcové, ale
binary
řetězec nelze donutit k vhodnému řazení pro porovnání (jelikož jeho kódování není známo). Proto chyba, které jste svědkem.
Dalo by se vynutit, aby bylo srovnání provedeno správně, explicitním casting
jeden nebo oba operandy, ale byl bych v pokušení přepracovat klauzuli tak, aby převod probíhal implicitně z porovnání s TIME
typ:
TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim