Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Illegale Mischung von Sortierungen für den Betrieb zum Datums-/Uhrzeitvergleich

  1. Wie im manuellen Eintrag für DATE_ADD() :

    In Ihrem Fall, weil table1.tim ist eine ZEIT Wert, gibt die Funktion einen String zurück.

    Die Zeichenfolge wird in dem Zeichensatz und der Sortierung zurückgegeben, die durch Zeichensatz_Verbindung und collation_connection .

  2. Wie im manuellen Eintrag für TIME erklärt () :

    Die Zeichenfolge wird als binäre Zeichenfolge zurückgegeben (warum nicht den Verbindungszeichensatz und die Sortierung verwenden, ist mir schleierhaft – vielleicht ein Fehler?).

  3. Wie im manuellen Eintrag für Type Conversion in Expression Evaluation erklärt :

    Daher ist der durchgeführte Vergleich ein Zeichenfolgenvergleich, aber der binäre Zeichenfolge kann nicht in eine geeignete Sortierung zum Vergleich gezwungen werden (da ihre Codierung nicht bekannt ist). Daher der Fehler, den Sie beobachten.

Durch explizites casting könnte man die korrekte Durchführung des Vergleichs erzwingen einen oder beide Operanden, aber ich wäre versucht, die Klausel einfach so zu überarbeiten, dass die Konvertierung implizit aus dem Vergleich mit einem TIME erfolgt Typ:

TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim