Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mistura ilegal de agrupamentos para operação para comparação de data/hora


  1. Conforme explicado na entrada manual para DATE_ADD() :

    No seu caso, porque table1.tim é um TIME valor, a função está retornando uma string.

    A string é retornada no conjunto de caracteres e agrupamento fornecido por character_set_connection e collation_connection .

  2. Conforme explicado na entrada manual para TIME() :

    A string é retornada como uma string binária (por que não usar o conjunto de caracteres de conexão e o agrupamento está além de mim - talvez um bug?).

  3. Conforme explicado na entrada manual para Conversão de tipo na avaliação de expressão :

    Portanto, a comparação realizada é uma comparação de strings, mas o binary string não pode ser forçada a um agrupamento adequado para comparação (já que sua codificação não é conhecida). Daí o erro que você está testemunhando.

Pode-se forçar a comparação a ser conduzida corretamente explicitamente casting um ou ambos os operandos, mas eu ficaria tentado apenas a retrabalhar a cláusula para que a conversão ocorra implicitamente a partir da comparação com um TIME modelo:
TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim