SPIP et MySQL 5 : detecter STRICT_ALL_TABLES
Bonjour,
j'ai réalisé la mise à jour de SPIP 2 à SPIP 3, et j'ai eu plusieurs plantages liés à la définition des tables. Il faut dire que j'utilise le mode "STRICT_ALL_TABLES". Voici l'erreur et mes 3 questions.
1 - Erreur format TEXT
maj.log
Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:!INFO: maj meta version_installee_maj_17577 etape 0: maj_tables Array Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:!INFO: version_installee_maj_17577: ok Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:!INFO: meta version_installee: 17577 en 7 secondes
mysql.log
Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:ERREUR: La table 'TESTV3.spip_jobs' n'existe pas - SHOW CREATE TABLE `spip_jobs` Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:ERREUR: BLOB 'descriptif' ne peut avoir de valeur par défaut - CREATE TABLE IF NOT EXISTS `TESTV3`.spip_jobs ( id_job bigint(21) NOT NULL auto_increment, descriptif text DEFAULT '' NOT NULL, fonction varchar(255) NOT NULL, args longblob DEFAULT '' NOT NULL, md5args char(32) NOT NULL default '', inclure varchar(255) NOT NULL, priorite smallint(6) NOT NULL default 0, date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, status tinyint NOT NULL default 1, PRIMARY KEY (id_job), KEY date (date), KEY status (status)) Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:ERREUR: BLOB 'descriptif' ne peut avoir de valeur par défaut - query inconnue Jul 03 18:42:41 127.0.0.1 (pid 3004) :Pri:ERREUR: Erreur 1101 de mysql: BLOB 'descriptif' ne peut avoir de valeur par défaut CREATE TABLE IF NOT EXISTS `TESTV3`.spip_jobs ( id_job bigint(21) NOT NULL auto_increment, descriptif text DEFAULT '' NOT NULL, fonction varchar(255) NOT NULL, args longblob DEFAULT '' NOT NULL, md5args char(32) NOT NULL default '', inclure varchar(255) NOT NULL, priorite smallint(6) NOT NULL default 0, date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, status tinyint NOT NULL default 1, PRIMARY KEY (id_job), KEY date (date), KEY status (status))
De fait, cette erreur arrive sur toutes les tables ayant un champ TEXT.
Ma question est simple, puisqu'une DEFAULT VALUE n'a pas de sens sur des colonnes TEXT, pourquoi en mettre ? (voir base/object.php)
2 - Erreur ordres SQL
Je note après avoir supprimé le mode STRICT_ALL_TABLES, qu'il reste des erreurs lors de la migration :
Jul 03 20:47:00 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta version_installee_maj_18955 etape 0: sql_alter TABLE spip_auteurs_liens ADD id_objet (id_objet)
Jul 03 20:47:00 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1064 de mysql: Erreur de syntaxe près de '(id_objet)' à la ligne 1
ALTER TABLE TESTV3
.spip_auteurs_liens ADD id_objet (id_objet)
Jul 03 20:47:00 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta version_installee_maj_18955 etape 1: sql_alter TABLE spip_auteurs_liens ADD objet (objet)
Jul 03 20:47:00 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1064 de mysql: Erreur de syntaxe près de '(objet)' à la ligne 1
ALTER TABLE TESTV3
.spip_auteurs_liens ADD objet (objet)
Jul 03 21:01:32 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta medias_base_version_maj_1.1.0 etape 0: sql_alter TABLE spip_documents_liens ADD id_objet (id_objet)
Jul 03 21:01:32 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1064 de mysql: Erreur de syntaxe près de '(id_objet)' à la ligne 1
ALTER TABLE TESTV3
.spip_documents_liens ADD id_objet (id_objet)
Jul 03 21:01:32 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta medias_base_version_maj_1.1.0 etape 1: sql_alter TABLE spip_documents_liens ADD objet (objet)
Jul 03 21:01:32 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1064 de mysql: Erreur de syntaxe près de '(objet)' à la ligne 1
ALTER TABLE TESTV3
.spip_documents_liens ADD objet (objet)
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta mots_base_version_maj_2.0.0 etape 10: sql_drop_table spip_mots_auteurs
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1051 de mysql: Table 'spip_mots_auteurs' inconnue
DROP TABLE TESTV3
.spip_mots_auteurs
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta mots_base_version_maj_2.1.0 etape 0: sql_alter TABLE spip_mots_liens ADD id_objet (id_objet)
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1064 de mysql: Erreur de syntaxe près de '(id_objet)' à la ligne 1
ALTER TABLE TESTV3
.spip_mots_liens ADD id_objet (id_objet)
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta mots_base_version_maj_2.1.0 etape 1: sql_alter TABLE spip_mots_liens ADD objet (objet)
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1064 de mysql: Erreur de syntaxe près de '(objet)' à la ligne 1
ALTER TABLE TESTV3
.spip_mots_liens ADD objet (objet)
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta petitions_base_version_maj_1.1.2 etape 0: sql_alter TABLE spip_petitions ADD id_petition BIGINT(21) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:!INFO: petitions_base_version_maj_1.1.2: ok
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:!INFO: maj meta petitions_base_version_maj_1.1.2 etape 1: sql_alter TABLE spip_petitions ADD PRIMARY KEY (id_petition)
Jul 03 21:01:33 127.0.0.1 (pid 2784) :Pri:ERREUR: Erreur 1068 de mysql: Plusieurs clefs primaires définies
ALTER TABLE TESTV3
.spip_petitions ADD PRIMARY KEY (id_petition)
Ces erreurs n'ont à priori pas d'effet, puisqu'elles portent sur des modifications de la base situé entre la V2 et la V3, néanmoins je ne suis pas sûr de comprendre ce que vous vouliez faire avec ALTER TABLE TESTV3
.spip_mots_liens ADD id_objet (id_objet), par exemple ? ou un ADD PRIMARY KEY juste après un ADD PRIMARY KEY.
3 - Notification d'erreur
Il est à noter qu'il reste curieux que le numéro de version soit mis à jour dans le META, même si une mise à jour s'est plantée et qu'on ait version_installee_maj_17577: ok. J'ai bien remarqué que vous ne récupérez pas le retour de call_user_func_array puisque certaines des fonctions appelées n'en renvoie pas non plus. Mais cela semble curieux de marquer "ok" dans la log, puisqu'en fait, on en sait rien.