-
Som förklaras i den manuella posten för
DATE_ADD()
:I ditt fall eftersom
table1.tim
är enTIME
värde, returnerar funktionen en sträng.Strängen returneras i teckenuppsättningen och sorteringen som ges av code>character_set_connection och
collation_connection
. -
Som förklaras i den manuella posten för
TIME ()
:Strängen returneras som en binär sträng (varför kan jag inte använda anslutningsteckenuppsättningen och sortering går inte för mig – kanske en bugg?).
-
Som förklaras i den manuella posten för Typkonvertering i uttrycksutvärdering :
Därför är jämförelsen som görs en strängjämförelse, men den
binära
sträng kan inte tvingas till en lämplig sammanställning för jämförelse (eftersom dess kodning inte är känd). Därav felet du bevittnar.
Man skulle kunna tvinga jämförelsen att genomföras korrekt genom att uttryckligen casta
en eller båda operanderna, men jag skulle bli frestad att bara omarbeta klausulen så att konverteringen sker implicit från jämförelse med en TIME
typ:
TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim