Page 1 sur 1

Passage Mysql 4 vers Mysql 5

Posté : 23 juin 2006, 10:42
par Cobaye
Bonjour,

j'ai une requête sql

Code : Tout sélectionner

INSERT INTO user(id_user,id_groupe_user,login_user,passwd_user,prenom,nom,email,en_ligne,language) VALUES ('','1','admin','3902adc1e543ec9a103f3363f54bbb','Olivier','LE CORRE','[email protected]','1','fr')


qui fonctionne sous Mysql 4, or la base de données vient de passer sous Mysql 5 et la requête ne fonctionne plus

Code : Tout sélectionner

Erreur: (1264) Out of range value adjusted for column 'id_user' at row 1
Diffile de me tapper toutes l'applications pour rendre les requetes compatibles, comment faire marcher cette requete sous mysql 5 ?

la conf de mysql 5 est celle par défaut

Posté : 23 juin 2006, 12:16
par zeus
Il me semble que, sous MySQL 5, pour qu'un id soit rempli automatiquement, il ne faut pas le citer et il sera pris en charge automatiquement par le SGBD.

Code : Tout sélectionner

INSERT INTO user(id_groupe_user,login_user,passwd_user,prenom,nom,email,en_ligne,language) VALUES ('1','admin','3902adc1e543dee103f3363f54bbb','Olivier','LE CORRE','[email protected]','1','fr')
Sinon, ton message d'erreur me fait penser à celui qui est retourné quand une table est corrompue :-k

Est-ce que tu y accèdes en lecture ?

Posté : 23 juin 2006, 16:37
par Cobaye
c'est pas un prob de table corrompu puisqu'elle est créer juste avant cette requete insertion ! si je met pas le champ auto-incrément dans la requete ca marche !

le prob c'est que j'ai des centaines de pages de scripts à revoir du coup !

Posté : 23 juin 2006, 18:53
par Hubert Roksor
Sans vouloir remuer le couteau dans la plaie, donner une chaîne vide pour un champs auto-incrémenté n'était pas une très bonne idée dès le départ :roll: Parfois on se moque de moi parce que je suis extrêmement strict sur la façon de programmer, mais sur le long terme ça évite ce genre de problèmes.

Idéalement, je te conseillerais de modifier tes requêtes comme le suggère zeus. Tu peux aussi remplacer '' par NULL ou même 0. Sinon, voici d'autres pistes, par ordre de facilité:
  • changer le mode SQL de ton serveur pour enlever STRICT_ALL_TABLES et STRICT_TRANS_TABLES. Ça devrait changer l'erreur en warning
  • créer un TRIGGER (BEFORE INSERT) pour remplacer la chaîne vide par 0 ou NULL
J'en avais une autre mais elle m'est sortie de tête :o

Posté : 23 juin 2006, 21:00
par Cobaye
suis pas à l'origine du code ! dans tout mes dev y a pas de chaine vide pour un incrément

Posté : 23 juin 2006, 21:25
par Hubert Roksor
Tu noteras que j'ai dit que c'était une mauvaise idée, pas que c'était la tienne :lol:

À priori, si ce n'est pas à toi de maintenir l'application alors contente-toi de modifier le mode SQL, ça devrait fonctionner. Note que tu peux le modifier globalement ou uniquement pour la connexion utilisée, afin d'utiliser sur le même serveur des applications compatibles et d'anciennes appli.