Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nielegalna mieszanka zestawień do operacji w celu porównania daty/godziny

  1. Jak wyjaśniono we wpisie ręcznym dla DATE_ADD() :

    W twoim przypadku, ponieważ table1.tim to TIME wartość, funkcja zwraca ciąg.

    Ciąg jest zwracany w zestawie znaków i sortowaniu podanym przez character_set_connection i collation_connection .

  2. Jak wyjaśniono we wpisie ręcznym dla TIME() :

    Ciąg jest zwracany jako ciąg binarny (dlaczego nie używać zestawu znaków połączenia i sortowania jest poza mną — może błąd?).

  3. Jak wyjaśniono we wpisie ręcznym dotyczącym konwersji typu w ocenie wyrażenia :

    Dlatego podjęte porównanie jest porównaniem ciągów, ale binary string nie może być przekształcony do odpowiedniego sortowania dla porównania (ponieważ jego kodowanie nie jest znane). Stąd błąd, którego jesteś świadkiem.

Można wymusić prawidłowe przeprowadzenie porównania przez jawne przesyłanie jeden lub oba operandy, ale kusiłoby mnie, aby po prostu przerobić klauzulę, aby konwersja odbywała się niejawnie z porównania z TIME typ:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CI - pokaż błąd bazy danych lub błąd

  2. Moja firma hostingowa twierdzi, że coś jest nie tak z kodem PHP

  3. Jaki jest najwydajniejszy sposób przechowywania porządku sortowania w grupie rekordów w bazie danych?

  4. wstawka warunkowa mysql - jeśli nie istnieje, wstawiaj

  5. Lokalny host MySQL !=127.0.0.1?