Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mélange illégal de classements pour l'opération de comparaison date/heure

  1. Comme expliqué dans l'entrée manuelle pour DATE_ADD() :

    Dans votre cas, car table1.tim est un TIME valeur, la fonction renvoie une chaîne.

    La chaîne est renvoyée dans le jeu de caractères et le classement donnés par character_set_connection et collation_connection .

  2. Comme expliqué dans l'entrée manuelle pour TIME() :

    La chaîne est renvoyée sous la forme d'une chaîne binaire (pourquoi ne pas utiliser le jeu de caractères de connexion et la collation me dépasse, peut-être un bogue ?).

  3. Comme expliqué dans l'entrée manuelle pour Conversion de type dans l'évaluation d'expression :

    Par conséquent, la comparaison entreprise est une comparaison de chaînes, mais le binary string ne peut pas être contraint à un classement approprié pour la comparaison (car son encodage n'est pas connu). D'où l'erreur dont vous êtes témoin.

On pourrait forcer la comparaison à être effectuée correctement en casting un ou les deux opérandes, mais je serais tenté de retravailler la clause afin que la conversion ait lieu implicitement à partir de la comparaison avec un TIME saisissez :

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