sql >> Database >  >> RDS >> Mysql

Illegale mix van sorteringen voor bewerking voor vergelijking van datum/tijd

  1. Zoals uitgelegd in de handmatige invoer voor DATE_ADD() :

    In jouw geval, omdat table1.tim is een TIME waarde, retourneert de functie een string.

    De tekenreeks wordt geretourneerd in de tekenset en sortering gegeven door character_set_connection en collation_connection .

  2. Zoals uitgelegd in de handmatige invoer voor TIME() :

    De tekenreeks wordt geretourneerd als een binaire tekenreeks (waarom gebruik ik de tekenset voor verbindingen niet en sortering is mij een raadsel - misschien een bug?).

  3. Zoals uitgelegd in de handmatige invoer voor Typeconversie in expressie-evaluatie :

    Daarom is de uitgevoerde vergelijking een stringvergelijking, maar de binary string kan niet worden gedwongen tot een geschikte vergelijking voor vergelijking (omdat de codering niet bekend is). Vandaar de fout waarvan u getuige bent.

Men zou kunnen afdwingen dat de vergelijking correct wordt uitgevoerd door expliciet casting een of beide operanden, maar ik zou in de verleiding komen om de clausule alleen maar te herwerken zodat de conversie impliciet plaatsvindt door vergelijking met een TIME typ:

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



  1. Lokale replica van RDS-database

  2. Produceer DISTINCT-waarden in STRING_AGG

  3. Eenvoudige recursieve boom in PHP / MySQL

  4. MySQL TIMESTAMP naar QDateTime met milliseconden