|
Olivier Thery
3 décembre 2005 10:36
|
spip 1.8.2.e ne fonctionne pas avec mysql 5.0.16 ???
Le problème vient sans doute du décalage entre la construction des tables de la base de données à partir du script d’installation, et les requêtes de création qui suivent (notamment celle d’un auteur dans la table spip_auteurs).
Par exemple, dans le fichier ./ecrire/inc_serialbase.php3, on trouve le script de création de la table spip_auteurs :*
$spip_auteurs = array(
"id_auteur" => "bigint(21) NOT NULL",
"nom" => "text NOT NULL",
"bio" => "text NOT NULL",
"email" => "tinytext NOT NULL",
"nom_site" => "tinytext NOT NULL",
"url_site" => "text NOT NULL",
"login" => "VARCHAR(255) BINARY NOT NULL",
"pass" => "tinytext NOT NULL",
"low_sec" => "tinytext NOT NULL",
"statut" => "VARCHAR(255) NOT NULL",
"maj" => "TIMESTAMP",
"pgp" => "BLOB NOT NULL",
"htpass" => "tinyblob NOT NULL",
"en_ligne" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"imessage" => "VARCHAR(3) NOT NULL",
"messagerie" => "VARCHAR(3) NOT NULL",
"alea_actuel" => "tinytext NOT NULL",
"alea_futur" => "tinytext NOT NULL",
"prefs" => "tinytext NOT NULL",
"cookie_oubli" => "tinytext NOT NULL",
"source" => "VARCHAR(10) DEFAULT 'spip' NOT NULL",
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"url_propre" => "VARCHAR(255) NOT NULL",
"extra" => "longblob NULL");
presque tous les champs sont déclarés "NOT NULL".
En revanche, dans le fichier ./ecrire/install.php3, on trouve (à l’étape 6 de l’installation) la requête de création du premier auteur :
$query = "INSERT INTO spip_auteurs (nom, email, login, pass, htpass, alea_futur, statut) VALUES('$nom','$email','$login','$mdpass','$htpass',FLOOR(32000*RAND()),'0minirezo')";
Or cette requête ne renseigne pas tous les champs, et donc le moteur MySql provoque une erreur pour tous les champs "NOT NULL" qui ne reçoivent pas de valeur.
2 solutions me paraissent possibles :
1) compléter les requêtes en mettant des valeurs "EMPTY" (c’est-à-dire des chaînes vides ’’) pour les champs TEXT NOT NULL
2) supprimer les "NOT NULL" dans le script d’installation.
Dans les 2 cas, je pense qu’il faut regarder dans le code tous les appels à la base de données (lecture, création, mise à jour) pour voir si les valeurs sont obligatoires ou non et si elles peuvent être une chaîne vide.
Personnellement, je n’ai pas encore eu le temps de faire ce petit travail.
Ce problème n’est pas propre à SPIP. Je l’ai rencontré également avec programme en PHP, comme le WIKI "Wikini", en passant de MySql 4.XX à MySql 5.XX.
Comment cela peut-il fonctionner avec MySql 4.XX ?
Est-ce dû à MySql ou à la librairie utilisée avec PHP (mysql ou mysqli) ?
|