Erreurs de Base de Données (MySQL)

Cette page se consacrera au contournement opérationnel de quelques erreurs MYSQL courantes...
Mais les solutions peuvent différer selon votre SGBD (le moteur de BDD pour La structure de base de données de SPIP 3) le plus souventMYSQL, cela peut être aussi MariaDB [1] qui présentera presque les memes soucis, mais aussi SQLite3 intégré au PHP ou d’autres...

Article publié le 17 avril 2021, et actualisé en mai 2024

 
 
 
 
 
 
 
 
Attention, cette page est encore en  

 Causes d’erreur courantes

Outre une interruption de service du serveur MYSQL palliée par le cache, les deux principales causes d’erreur courantes proviennent de :
- mauvaise copie automatique de tables par SPIP :
symptôme : des tables manquantes et d’autres nommées comme spip_XXXX
- champ inconnu dans une table :
symptôme : un placard d’erreur masque une partie de l’espace privé ...
avec un message du genre..
Soit un plugin n’a pas été correctement activé (il n’a pas ajouté ses champs à la base).
Soit la base utilisée ou restaurée n’est pas à la bonne définition de structure...

- Impossible de créer un article dans SPIP : plus exactement, la création d’articles échoue avec un message d’erreur sibyllin "Erreur" (sans autre indication) : voir ci-dessous. En investiguant (par Adminer) on constate qu’un article est bien créé, mais avec un id_article à zéro !
Les plus tenaces auront aussi analysé la structure de la base d’Articles, et sur le champ id_article manque l’indication "Incrément automatique".....
Je ne sais pas comment, la définition de la table SPIP Articles a été altérée dans MySQL, et le champ index n’est pas automatiquement valué [2] Adminer vous permettra facilement de "Modifier la structure de la table", et la colonne marqué "AI" vous permettra de revalider l’incrément automatique sur le champ clé...


 Le cas des dates

Le format datetime est tres précis,et MySQL reste souvent exigeant sur le sujet, comme SPIP, en particulier pour les valeurs initialisées à zéro [3] ou nulles : de vieilles versions de Saisies SPIP peuvent entrainer des bugs inexplicables, mais la norme est désormais à lire ici.

- les MYSQL récents sont exigeant sur les DATE
Ce sont des messages du genre

  • Erreur dans la requête (1067) : Invalid default value for ’date’
    lors de l’importation d’une base par instructions SQL texte (ou activation d’un plugin)

Cette erreur peut être provoquée par une définition de date en table sous la forme traditionnelle :
datetime NOT NULL DEFAULT '0000-00-00 00:00:00',, qui n’est plus acceptée en mode SQL strict.

La solution est généralement à rechercher du côté du paramétrage SQL_MODE :
- vous pouvez rajouter directement la valeur d’une ligne dans mes_options,
- SPIP permet déjà de définir directement deux constantes :

  • _MYSQL_SQL_MODE
  • _MYSQL_SQL_MODE_TEXT_NOT_NULL

- une solution facile en local : modifier le mode de démarrage de SQL directement dans le fichier de configuration /mysql/mysql5.7.36my.ini, en revenant en mode traditionnel : modifier ces lignes....

; Set the SQL mode to strict  (trop exigeant pour les SPIP traditionnels)
;sql_mode=""
sql_mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"

Un autre type d’erreurs est parfois signalé, en particulier pour l’installation de plugins (voir par exemple https://discuter.spip.net/t/ovh-et-...). Pour d’obscures raisons de fonctionnement interne de plugins liés à la base de donnée, il faut lancer une "Maintenance / Répartation technique" juste après l’installation de chaque plugin récalcitrant


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1MariaDB et MySQL sont des ’forks’ issu du même source MySQL, qui ont divergé depuis quelques années...

[2La Maintenance/Réparation automatique de Base de Données ne détecte pas cette ’pedzouille’... il faut corriger manuellement !

[3Une date à zéro, ce n’est pas la naissance du Christ mais le plus souvent le depuis le 1 janvier 1970 Heure_Unix ! Avant les ordinateurs n’existaient (presque ;-) pas.

[4MariaDB et MySQL sont des ’forks’ issu du même source MySQL, qui ont divergé depuis quelques années...


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 17 avril 2021, et actualisé en mai 2024 Provisoire (à compléter...) .

Répondre à cet article