Heim  >  Artikel  >  Datenbank  >  Warum gibt meine MySQL-Funktion den Fehler „1418 (HY000)“ in Bezug auf deterministische Deklarationen aus?

Warum gibt meine MySQL-Funktion den Fehler „1418 (HY000)“ in Bezug auf deterministische Deklarationen aus?

DDD
DDDOriginal
2024-11-02 12:22:30158Durchsuche

Why Does My MySQL Function Throw a

DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN in der Funktionsdeklaration mit aktivierter Binärprotokollierung

Beim Versuch, eine Datenbank in MySQL zu importieren, wurde ein Es kann eine Fehlermeldung auftreten, die darauf hinweist, dass einer Funktion eine der folgenden Deklarationen in ihrer Deklaration fehlt und die binäre Protokollierung aktiviert ist:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

Problem lösen

Es gibt zwei Methoden zur Behebung dieses Problems:

  1. Führen Sie Folgendes in der MySQL-Konsole aus:
SET GLOBAL log_bin_trust_function_creators = 1;
  1. Fügen Sie Folgendes zur Konfigurationsdatei mysql.ini hinzu:
log_bin_trust_function_creators = 1;

Dies erleichtert die Prüfung auf nicht deterministische Funktionen, also Funktionen, die Daten ändern.

Deterministische Deklarationen verstehen

Deterministische Funktionen erzeugen immer das gleiche Ergebnis für die gleichen Eingabeparameter, nichtdeterministische Funktionen hingegen nicht. MySQL verwendet diese Deklarationen während der Replikationsoptimierung.

Arten deterministischer Deklarationen

Es stehen mehrere Arten deterministischer Deklarationen zur Verfügung:

  • DETERMINISTISCH: Deklariert die Funktion als deterministisch.
  • NICHT DETERMINISTISCH: Deklariert die Funktion als nicht deterministisch.
  • LESET SQL-DATEN: Deklariert, dass die Funktion nur Daten aus Datenbanken liest.
  • KEIN SQL: Deklariert, dass die Funktion keine SQL-Anweisungen enthält.
  • ENTHÄLT SQL: Deklariert, dass die Funktion SQL-Anweisungen enthält, aber keine Daten liest oder schreibt.

Best Practice

Es wird empfohlen, deterministische Deklarationen für gespeicherte Daten ordnungsgemäß anzugeben Funktionen zur Gewährleistung einer optimalen Replikation und Datenintegrität. Indem Sie die Art der Funktion sorgfältig abwägen und die entsprechenden Deklarationen verwenden, können Sie Fehler verhindern und die Datenbankleistung optimieren.

Das obige ist der detaillierte Inhalt vonWarum gibt meine MySQL-Funktion den Fehler „1418 (HY000)“ in Bezug auf deterministische Deklarationen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn