"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro "1418 (HY000) Esta função não possui DETERMINISTIC, NO SQL ou READS SQL DATA em sua declaração e o log binário está ativado" no MySQL?

Como resolver o erro "1418 (HY000) Esta função não possui DETERMINISTIC, NO SQL ou READS SQL DATA em sua declaração e o log binário está ativado" no MySQL?

Publicado em 2024-11-16
Navegar:871

How to Solve the \

Ao importar um banco de dados MySQL, você pode encontrar o erro "1418 (HY000) na linha 10185: Esta função não possui DETERMINISTIC, NO SQL ou READS SQL DATA em sua declaração e o registro binário está ativado (você pode usar a variável menos segura log_bin_trust_function_creators)." Este erro ocorre quando você não especificou a natureza determinística de uma função no banco de dados.

Para resolver esse erro, você pode usar um dos dois métodos:

Método 1: Temporariamente Desativar registro binário

SET GLOBAL log_bin_trust_function_creators = 1;

Método 2: configurar o arquivo mysql.ini

log_bin_trust_function_creators = 1;

Ao definir esse valor como 1, você relaxa a verificação de funções não determinísticas. Esta opção deve ser usada com cautela, pois pode comprometer potencialmente a integridade dos seus dados.

Compreendendo as funções determinísticas

Para evitar esse erro no futuro, uma abordagem melhor é usar declarações determinísticas para funções armazenadas. Estas declarações informam ao MySQL se a função sempre produz o mesmo resultado para os mesmos parâmetros de entrada. Aqui estão as diferentes declarações determinísticas:

DETERMINISTIC:

  • Funções que sempre produzem o mesmo resultado para os mesmos parâmetros de entrada.

NÃO DETERMINÍSTICO:

  • Funções que nem sempre produzem o mesmo resultado para os mesmos parâmetros de entrada. Se não for declarado explicitamente, o padrão do MySQL é NOT DETERMINISTIC.

READS SQL DATA:

  • Funções que apenas leem dados de bancos de dados.

NO SQL:

  • Funções que não contêm instruções SQL.

CONTAINS SQL:

  • Funções que contêm instruções SQL, mas não leem nem gravam dados.

Escolhendo a declaração correta

Selecionando a declaração correta a declaração de uma função depende de seu comportamento. Se a saída da função depender de fatores externos ao banco de dados, como a hora atual ou um gerador de números aleatórios, ela deverá ser declarada como NOT DETERMINISTIC. Se a função apenas lê dados, ela pode ser declarada como READS SQL DATA. Se a função não contiver nenhuma instrução SQL, ela poderá ser declarada como NO SQL.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3