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 juin 2022

 
 
 
 
 
 
 
 
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...


 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 [2] 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...

[2Une 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.

[3MariaDB 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 juin 2022 Provisoire (à compléter...) .

Répondre à cet article