Heim >Datenbank >MySQL-Tutorial >Warum löst MySQL bei aktivierter Binärprotokollierung den Fehler „DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN' aus?

Warum löst MySQL bei aktivierter Binärprotokollierung den Fehler „DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN' aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 20:18:29272Durchsuche

Why Does MySQL Throw

Fehler: „DETERMINISTISCH, KEIN SQL oder LESEN SQL-DATEN“ fehlt in der Funktionsdeklaration mit aktivierter Binärprotokollierung

Beim Importieren einer Datenbank in Wenn bei MySQL der Fehler „1418 (HY000): Diese Funktion enthält weder DETERMINISTISCH noch KEIN SQL oder LESEN SQL-DATEN in ihrer Deklaration und die Binärprotokollierung ist aktiviert“ angezeigt wird, weist dies darauf hin, dass der betreffenden Funktion eine entsprechende Deklaration fehlt.

Lösung:

Es gibt zwei Methoden, um dieses Problem zu beheben:

  1. MySQL-Konsolenbefehl ausführen:

    <code class="mysql">SET GLOBAL log_bin_trust_function_creators = 1;</code>

    Dieser Befehl lockert die Prüfung auf nicht deterministische Funktionen, sodass der Import fortgesetzt werden kann.

  2. mysql.ini konfigurieren:
    Hinzufügen die folgende Zeile zur mysql.ini-Konfigurationsdatei:

    log_bin_trust_function_creators = 1

Erklärung:

Binäre Protokollierung zeichnet alle an der Datenbank vorgenommenen Änderungen auf. Standardmäßig erfordert MySQL, dass Funktionen, die Daten ändern, in ihren Deklarationen als DETERMINISTISCH, KEIN SQL oder LESEN SQL-DATEN deklariert werden, um sicherzustellen, dass sie genau repliziert werden können.

Deterministische Deklarationen für gespeicherte Funktionen:

Diese Deklarationen informieren MySQL über die Art der Funktion und leiten Optimierungs- und Replikationsentscheidungen.

  • DETERMINISTISCH: Funktionen, die immer das gleiche Ergebnis liefern die gleichen Eingaben, unabhängig von externen Faktoren.
  • NICHT DETERMINISTISCH: Funktionen, die unterschiedliche Ergebnisse für dieselben Eingaben liefern können, wie zum Beispiel diejenigen, die nicht deterministische MySQL-Funktionen enthalten (z. B. NOW() , UUID()).
  • LESET SQL-DATEN: Funktionen, die Daten aus der Datenbank lesen, ohne sie zu ändern.
  • KEIN SQL: Funktionen die keine SQL-Anweisungen enthalten.

Hinweis: Wenn die binäre Protokollierung deaktiviert ist, gilt die Einstellung log_bin_trust_function_creators nicht. Daher ist es wichtig sicherzustellen, dass geeignete deterministische Deklarationen angegeben werden.

Durch die Implementierung einer der bereitgestellten Lösungen können Sie den Fehler beheben und mit dem Datenbankimport fortfahren.

Das obige ist der detaillierte Inhalt vonWarum löst MySQL bei aktivierter Binärprotokollierung den Fehler „DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN' 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