-
Comme expliqué dans l'entrée manuelle pour
DATE_ADD()
:Dans votre cas, car
table1.tim
est unTIME
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
etcollation_connection
. -
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 ?).
-
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