Maison > Article > base de données > Comment résoudre l'erreur « 1418 (HY000) Cette fonction n'a aucun élément DÉTERMINISTE, AUCUN SQL ou LECTURE DE DONNÉES SQL dans sa déclaration et la journalisation binaire est activée » Erreur dans MySQL ?
Lors de l'importation d'une base de données MySQL, vous pouvez rencontrer l'erreur "1418 (HY000) à la ligne 10185 : Cette fonction n'a aucun DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée (vous pourriez vouloir utiliser la variable log_bin_trust_function_creators, la moins sûre)." Cette erreur se produit lorsque vous n'avez pas spécifié la nature déterministe d'une fonction dans la base de données.
Pour résoudre cette erreur, vous pouvez utiliser l'une des deux méthodes suivantes :
Méthode 1 : Temporairement Désactiver la journalisation binaire
SET GLOBAL log_bin_trust_function_creators = 1;
Méthode 2 : configurer le fichier mysql.ini
log_bin_trust_function_creators = 1;
En définissant cette valeur sur 1, vous relâchez le vérification des fonctions non déterministes. Cette option doit être utilisée avec prudence car elle peut potentiellement compromettre l'intégrité de vos données.
Comprendre les fonctions déterministes
Pour éviter cette erreur à l'avenir, une meilleure approche consiste à utiliser des déclarations déterministes pour les fonctions stockées. Ces déclarations indiquent à MySQL si la fonction produit toujours le même résultat pour les mêmes paramètres d'entrée. Voici les différentes déclarations déterministes :
DETERMINISTIQUE :
NON DÉTERMINISTE :
LECTURE DES DONNÉES SQL :
NO SQL :
CONTIENT SQL :
Choisir la déclaration correcte
Sélectionner la bonne déclaration La déclaration d'une fonction dépend de son comportement. Si le résultat de la fonction dépend de facteurs externes à la base de données, tels que l'heure actuelle ou un générateur de nombres aléatoires, il doit être déclaré NON DÉTERMINISTE. Si la fonction lit uniquement des données, elle peut être déclarée comme READS SQL DATA. Si la fonction ne contient aucune instruction SQL, elle peut être déclarée comme NO SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!