sql >> Databáze >  >> RDS >> Mysql

Neplatná kombinace porovnávání pro operaci pro porovnání data a času

  1. Jak je vysvětleno v ručním zadání pro DATE_ADD() :

    Ve vašem případě, protože table1.tim je TIME hodnota, funkce vrací řetězec.

    Řetězec je vrácen ve znakové sadě a řazení dané character_set_connection a collation_connection .

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

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



  1. Byl nalezen únik databáze SQLite

  2. procházejte vícerozměrným polem v php a proveďte vložení mysql (údaje o akciích)

  3. MySQL/SQL:Aktualizace s korelovaným poddotazem ze samotné aktualizované tabulky

  4. Spojte více řádků do jednoho spojení MySQL