sql >> Base de Datos >  >> RDS >> Mysql

Combinación ilegal de intercalaciones para la operación de comparación de fecha/hora

  1. Como se explica en la entrada manual para DATE_ADD() :

    En tu caso, porque table1.tim es un TIME value, la función devuelve una cadena.

    La cadena se devuelve en el conjunto de caracteres y la intercalación proporcionada por character_set_connection y collation_connection .

  2. Como se explica en la entrada manual para TIME() :

    La cadena se devuelve como una cadena binaria (¿por qué no usar el conjunto de caracteres de conexión y la intercalación me supera, tal vez un error?).

  3. Como se explica en la entrada manual para Type Conversion in Expression Evaluation :

    Por lo tanto, la comparación realizada es una comparación de cadenas, pero el binary la cadena no se puede forzar a una intercalación adecuada para la comparación (ya que se desconoce su codificación). De ahí el error que está presenciando.

Se podría forzar a que la comparación se realice correctamente casting explícitamente uno o ambos operandos, pero estaría tentado a volver a trabajar en la cláusula para que la conversión se realice implícitamente a partir de la comparación con un TIME tipo:

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