[mysql] Laisser une valeur null par défaut ou non?

Laisser une valeur null par défaut ou non? [mysql] - SQL/NoSQL - Programmation

Marsh Posté le 07-03-2003 à 15:33:36    

voila, particulièrement pour mysql,  
est ce qu'on a interet à mettre pour un champ
varchar(15) NOT NULL default '',
ou
int NOT NULL default '0',
 
ou bien laisser NULL comme valeur par défaut?
 
qu'elle pourrait etre les différentes utilités? s'il y en a?
 

Reply

Marsh Posté le 07-03-2003 à 15:33:36   

Reply

Marsh Posté le 07-03-2003 à 18:38:11    

sa depend se que tu veut faire avec ta table, sa peut etre utile des fois qu'un champs soit null, sa depend vraiment de se que tu veut en faire

Reply

Marsh Posté le 07-03-2003 à 22:11:02    

J'ai tendance à essayer d'éviter les champs NULL, sauf si ca représente réellement quelque chose.
 
Sinon, tu te retrouve avec des problèmes au moment de traiter les résultats des requêtes, comme par exemple, faire la distinction entre '' et NULL en php ou autre :/

Reply

Marsh Posté le 08-03-2003 à 01:31:37    

mrBebert a écrit :

J'ai tendance à essayer d'éviter les champs NULL, sauf si ca représente réellement quelque chose.
 
Sinon, tu te retrouve avec des problèmes au moment de traiter les résultats des requêtes, comme par exemple, faire la distinction entre '' et NULL en php ou autre :/  

le truc c'est que justement, '' et NULL c'est pas la meme chose :sarcastic:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-03-2003 à 11:55:31    

the real moins moins a écrit :

le truc c'est que justement, '' et NULL c'est pas la meme chose :sarcastic:

C'est bien ca le problème. C'est pas pareil, mais quand quand tu fais un mysql_fetch_array de ton résultat en PHP, tu perds cette info.
Dans les 2 cas, ($r['champ'] == "" ) est évalué à vrai :/

Reply

Marsh Posté le 08-03-2003 à 13:49:04    

[:blueflag]
 
la question m'intéresse, et pour le moment j'ai tendance à éviter les null également.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 08-03-2003 à 14:05:11    

mrBebert a écrit :

C'est bien ca le problème. C'est pas pareil, mais quand quand tu fais un mysql_fetch_array de ton résultat en PHP, tu perds cette info.
Dans les 2 cas, ($r['champ'] == "" ) est évalué à vrai :/  

=== NULL, qqchose comme ça
edit: bon pour le === je sais pas trop, à tester. sinon:
http://www.php.net/manual/en/language.types.null.php
http://www.php.net/manual/en/function.is-null.php


Message édité par the real moins moins le 08-03-2003 à 14:10:50

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-03-2003 à 19:04:34    

T'es sur que le NULL du SQL est le même que le NULL de PHP ? J'ai un très gros doute :heink:

Reply

Marsh Posté le 08-03-2003 à 23:00:49    

si ca peut faire avancer l'histoire, en asp on a une commande pour tester la "nullité" (mouarf) d'un champ
IF IsNull(rs("champ" ) THEN
y'a pas d'équivalent en php?


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 08-03-2003 à 23:05:55    

Urd-sama a écrit :

si ca peut faire avancer l'histoire, en asp on a une commande pour tester la "nullité" (mouarf) d'un champ
IF IsNull(rs("champ" ) THEN
y'a pas d'équivalent en php?
 

ben si je l'ai donné y'a qques posts là ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-03-2003 à 23:05:55   

Reply

Marsh Posté le 08-03-2003 à 23:06:23    

bon comme j'ai rien à foutre et que mon serveur est allumé je vais tester pour vous  :sarcastic:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-03-2003 à 23:07:16    

the real moins moins a écrit :

ben si je l'ai donné y'a qques posts là ;)


en effet je n'avais pas checké tes liens.
ca sera un tit complément d'info alors  :jap:


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 08-03-2003 à 23:36:13    

mrBebert a écrit :

T'es sur que le NULL du SQL est le même que le NULL de PHP ? J'ai un très gros doute :heink:  

c'est la moindre des choses nan? :heink:
et pour les incrédules:
 

Code :
  1. CREATE TABLE test (
  2.   id int(10),
  3.   txt varchar(50)
  4. );
  5. INSERT INTO test VALUES("13", "blah" );
  6. INSERT INTO test VALUES("23", "" );
  7. INSERT INTO test VALUES("33", NULL);

 

Code :
  1. <?
  2. include("includes/db.inc.php" );
  3. ?>
  4. <html>
  5. <body>
  6. <p>null testing</p>
  7. <table border=1>
  8. <tr>
  9. <td>$id</td>
  10. <td>$txt</td>
  11. <td>isset($txt)</td>
  12. <td>is_null($txt)</td>
  13. <td>empty($txt)</td>
  14. </tr>
  15. <?
  16. $sql = "SELECT id, txt FROM test ORDER BY id";
  17. $res = mysql_query($sql, openDBConnection());
  18. while ($row = mysql_fetch_array($res)) {
  19. $id = $row['id'];
  20. $txt = $row['txt']; ?>
  21.     <tr>
  22.      <td><?=$id?></td>
  23.      <td><?=$txt?></td>
  24.      <td><?=isset($txt)?"true":"false"?></td>
  25.      <td><?=is_null($txt)?"true":"false"?></td>
  26.      <td><?=empty($txt)?"true":"false"?></td>
  27.     </tr>
  28. <?
  29. }
  30. mysql_free_result($res);
  31. ?>
  32. </table>
  33. </body>
  34. </html>

 
 
(l'include ne fait que definir la fonction openDBConnection)
 
et ça donne:


$id  $txt  isset($txt)  is_null($txt)  empty($txt)
13   blah  true         false          false
23         true         false          true
33         false        true           true


 
 [:jm@rc]


Message édité par the real moins moins le 08-03-2003 à 23:36:53

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-03-2003 à 00:17:38    

Donc on peut faire la différence :)
Intéressant :jap:  
 
Sinon, est-ce qu'il y a le même résultat dans ces 2 cas :
- echo isset($row['txt']);
- $txt = $row['txt']; echo isset($txt);


Message édité par mrbebert le 09-03-2003 à 00:18:01
Reply

Marsh Posté le 09-03-2003 à 00:19:18    

mrBebert a écrit :

Donc on peut faire la différence :)
Intéressant :jap:  
 
Sinon, est-ce qu'il y a le même résultat dans ces 2 cas :
- echo isset($row['txt']);
- $txt = $row['txt']; echo isset($txt);

oui
 
si j'avais fait l'inverse (ne pas assigner $row['txt'] à $txt), on aurait pu en douter, mais là non ;)
 
si dans mon exemple $txt est null, forcément $row['txt'] l'est aussi
cela dit, tu peux tjs tester avant de baser tes script sur cette affirmation :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-03-2003 à 00:27:10    

Je testerais bien, mais j'ai pas de PHP/mysql là sur moi :(  
(enfin si, mais pas en état de marche :D )
 
Mais bon, dans tout les cas, je vais essayer de faire des choses plus simples. Ce genre de subtilités, je sens que ca va pas forcément plaire à mes collègues :pt1cable:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed