|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 5 ![]() |
Bonjour,
je débute en SQL et je ne trouve pas de solution à ce problème. voici ma table : Code :
Code :
voici le contenu de la table après la manip : Code :
merci d'avance pour votre aide. Hector |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() |
Parce qu'une colonne CHAR ou VARCHAR NOT NULL a pour valeur par défaut une châine vide si cela n'est pas spécifié.
Au passage, un CHAR(4) comme clé primaire, ce n'est pas une très bonne clé.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 5 ![]() |
Salut,
Que la colonne ait une valeur par défaut (dans mon cas "aucune" mais comme tu dis, pour un CHAR c'est certainement chaine vide) OK, mais là, explicitement je lui demande, dans l'Update, de mettre NULL. Donc je m'attendais à une erreur. A priori, on me dit que cela est dû au sql_mode qui n'est pas strict et donc, qui provoque ce que tu décris alors que si il était en mode strict, j'aurais le fonctionnement souhaité. Mais là, nouveau problème, je ne parviens pas à basculer ma base (via phpmyadmin) en mode strict. Dans mon SQL DUMP, j'ai la ligne SET : j'essaye d'executer dans l'onglet SQL de ma BD la commande : la requête passe avec succès mais pas le résultat escompté. Dans mon SQL DUMP, toujours le même mode activé et si j’exécute : SELECT @@sql_mode;je n'ai pas d'erreur mais il ne me retourne aucune valeur. Autre bizarrerie : si j’exécute le SET et le Select en une passe, cette fois le select me sort bien : STRICT_TRANS_TABLES !!!! par contre, dans la réalité, toujours pas de mode strict activé. Qu'est ce que je rate ? ps : je suis en Localhost sous root qui a tous les privilèges. merci d'avance, Hector |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 874 ![]() |
salut,
tu mets pas le @@ dans ton set donc ça ne touche pas explicitement la variable de session, ça devrait marcher: Code sql :
SET @@sql_mode = STRICT_TRANS_TABLES; le même nom de variable sans rien devant ou avec @ (globale), @@ (session)... c'est pas du tout la même chose pour lui
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 5 ![]() |
Malheureusement, toujours pas de réussite. Je ne connaissais pas ces notions de sessions.
Il ne manquerait pas un genre de commit quelque part ? de plus, dans mon sql dump, j'ai : pourtant, lorsque je fais des SELECT sql_mode (avec 1 ou 2 @) j'ai, soit rien, soit NULL. Où est stocké ce "NO_AUTO_VALUE_ON_ZERO" ? merci merci, Hector |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 874 ![]() |
déjà c'est donc aussi:
et en plus, c'est pas une chaine de caractère la valeur à mettre dedans sauf si tu le passe en ligne de commande...lis ça
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 5 ![]() |
Ok.
Lorsque je lance la console Mysql et que j'effectue un update NULL sur un champ Non NULL => pas d'erreur (c'est embêtant) J’exécute alors la commande : puis mon update à nouveau et là parfait, j'ai un dump. Effectivement, si je lance : j'ai en résultat : STRICT_ALL_TABLES rq: j'ai aussi effectué un : Je vais ensuite dans phpmyadmin et j'essaye d'effectuer le UPDATE depuis l'onglet SQL => pas de DUMP !!! (zut) si je lance un SELECT @@sql_mode, je n'ai pas de résultat. Donc au final, je ne sais toujours pas comment m'y prendre. Comment faire pour que mon SET reste actif (si je quitte la console et je reviens, j'ai perdu ma valeur dans le sql_mode et donc mon update ne Dump plus) dans la console et dans mon phpmyadamin. désolé, je n'ai vraiment aucune notion d'admin sql. merci, Hector |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 874 ![]() |
attention... si tu passes par la console et phpmyadmin ce sont 2 connexions en parallèle et indépendantes...
or ce réglage n'affecte que la connexion en cours pour la durée de la session... en gros, si tu lances 4x la console mysql tu as 4 connexions avec leurs réglages propres... la seule configuration "partagée" est celle du fichier de configuration du serveur qui définit le comportement du serveur et du client... quand tu modifies une variable de configuration, cela ne touche que le contexte ou la session selon sont niveau d'action... phpmyadmin est très limité de par sa façon de gérer les commandes 1 à 1... il peut même pas exécuter une procédure stockée... si tu développes sous windows, utilise un client comme heidisql, là tu auras plus de limitation et c'est un logiciel opensource.... quand tu fais une action où tu veux un comportement spécifique... soit:
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 5 ![]() |
Un grand merci. Grâce à tes indications, j'ai pu débloquer la situation.
J'execute une requete contenant le SET sql_code juste après l'instanciation de ma base dans mon code php. Hector |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com