Non car encore une fois on peut voir une différence entre chaîne vide et null. C'est une nuance mais elle existe.
Dans un champ not null je devrais pouvoir mettre une chaîne vide.
Non car encore une fois on peut voir une différence entre chaîne vide et null. C'est une nuance mais elle existe.
Dans un champ not null je devrais pouvoir mettre une chaîne vide.
Vous pouvez diviser par NULL, mais pas par 0.
Alors, et pour la dernière fois, pourquoi ce comportement ne s'applique t-il pas aux autres types :Envoyé par nuke_y
où est donc le standard ? du coté de ceux qui appliquent cette particulière particularité ou du coté de ceux qui appliquent strictement la règle ?
Un autre exemple :
0 est un nombre pair.
Et un chiffre inexistant, quelle est sa parité ? Il n'en a pas !
Pareil pour les chaines :
Une chaine vide a une longueur de 0.
Et une chaine inexistante ? Elle n'a pas de longueur
En fait je pense qu'on va vite tourner en rond, le principe du existe, existe pas, et du "est vide" ou "n'est pas vide" est admis depuis longtemps, donc bien que je puisse _COMPRENDRE_ le fait qu'il est inutile pour une base de données de stocker une chaine vide plutot que la constante NULL ( La raison pourrait être un gain de place ? Une rapidité lors des requêtes car la valeur NULL est plus facilement indexable ? ) je pense qu'il faut rester cohérent avec les principes admis en mathématiques, car un jour il se peut que cette différence soit significative.
Elle l'est déjà d'ailleurs : imaginons un champ commentaire tout simple, qu'un utilisateur peut choisir de renseigner ou non. On peut donc savoir si la personne l'a renseigné ou non, en testant la nullité du champs, mais nous sommes d'accord qu'une personne qui a prit le temps de mettre un commentaire vide a fait une action en plus qu'une personne n'ayant pas du tout fait de commentaire, non ? Un vote blanc, est différent d'une abstention
Bah le standard il est dans le reste du monde je pense.
Le reste du monde considère que '' est différent de null, alors pourquoi pas Oracle ? Ils décident de faire comme ils veulent, soit, mais dans ce cas il ne faut pas s'étonner si beaucoup de gens râlent. Après c'est un choix qu'ils font, mais ils sont minoritaires dans le monde des SGDB (et des languages objet).
D'accord, mais ne parlons-pas donc de logique sur ce point.Envoyé par nuke_y
Alors attention, si on parle de logique pure, surtout basée sur l'aspect... réaliste des données, effectivement null et '' c'est pareil, aucun problème là dessus je l'ai dit au début. Du point de vue des données (et donc du "modèle" si je peux m'exprimer ainsi) c'est comme ça que ça doit marcher.
Maintenant avec l'arrivée des languages objet, une nuance est apparue entre '' et null. Cette nuance a été... disons tolérée et intégrée par tous les SGDB et pas par Oracle. Donc maintenant comme je le disais ils peuvent s'aligner (et rendre l'interopérabilité plus facile) ou garder leur position en disant que c'est pas parce que le reste du monde se jette dans un ravin qu'ils s'y jetteront aussi.
Mais en temps qu'interopérateur je préférerai qu'ils s'alignent.
Moi je suis nul, et pourtant, je suis loin d'être vide !!!!!!!!!!!!!!!!
CQFD !!Envoyé par KiLVaiDeN
Magistrale démonstration, rien à dire.
[quote="nuke_y"]...Maintenant avec l'arrivée des languages objet, une nuance est apparue entre '' et null. Cette nuance a été... disons tolérée et intégrée par tous les SGDB et pas par Oracle...[/ quote]
simple question de réthorique :
alors est-ce que ça n'aurais pa du être aux "petits nouveaux", donc les langages objets, de s'adapter aux usages des SGBD déjà bien établi ?
je m'interroge...
Cette différence date de bien avant ! elle apparaît avec la notion de pointeur.
En C, par exemple, lorsque l'on réserve un emplacement pour un objet, l'adresse mémoire ne contient rien (sinon la valeur en cours). Pour une chaîne de caractère, lorque l'on l'initialise avec rien, on trouve tout de même le terminateur de chaîne \0. Ce qui pourrait expliquer "l'infime" différence. Toujours est-il que si l'on interroge la longueur d'une telle chaîne on obtient bien 0, et de toute façon le contenu est vide ou null ou ce que vous voulez, mais bref, il n'y a rien !
Ouaih mais le C j'en étais pas sûr alors j'ai préféré en rester aux languages objets. M'enfin bon on voit bien que cette nuance existe dans les languages, et qu'il y a donc une différence entre les languages et le SGDB, différence effacée par les autres SGDB et pas par Oracle.
Et tient tant qu'on y est, est-ce qu'il n'y a QUE Oracle qui a cette équivalence entre '' et null ?
Je ne pensais pas que ma question succiterait autant de réaction.
En tout cas merci beaucoup pour la réponse et toutes ces explications.
Sinon il faut juste le savoir . C'est tout.
null, vide ou string tout çà c'est pareil c'est que des bits
Sauf que les strings ne présentent pas les bits de la même façonEnvoyé par ZeKiD
Moi je veux bien changer ne serait-ce qu'un bit dans la base de données de mon compte en banque
C'est exactement ce que je pensais !!!Envoyé par SheikYerbouti
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager