Quel est le point de “not NULL DEFAULT " ”?
J'ai vu cela sur un grand nombre de champs de la base de données à partir d'un projet que j'ai travaillé, où une colonne est définie non pas nulle, mais une chaîne vide comme valeur par défaut. quel est le point de le faire? Si vous permettra à une chaîne vide, pourquoi ne pas simplement laisser un champ null?
Vous devez vous connecter pour publier un commentaire.
Les valeurs null ont un comportement particulier: comparaison de quoi que ce soit avec une valeur NULL vous donne en un
NULL
, qui est autre chose quefalse
ou0
. Il signifie "inconnu".Par exemple, prenez ce tableau:
SELECT * FROM mytable WHERE gender = 'M'
sera de retour à 1 rangée, comme prévuSELECT * FROM mytable WHERE gender != 'M'
sera de retour 2 lignes, PAS 3 lignes.SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
sera de retour le 3 lignes.Edit: Pour certaines applications, à l'aide de
0
(ou, à Dieu ne plaise, un autre "nombre magique") au lieu deNULL
n'est pas recommandé (parts ou des valeurs exactes ne sont pas pertinentes dans cet exemple):Ici, le
NULL
sur Jan 6 signifie "valeur inconnue" - peut-être parce que la température était si faible que la sonde du thermomètre cessé de répondre. Cependant, c'est une toute autre signification que Jan 3e, lorsque la température était0
, qui est, de 0 degrés.Aussi, comme @Bill Karwin mentionne, les valeurs Null comporter spécialement dans des fonctions d'agrégation (
COUNT
,SUM
,AVG
etc.): le calcul deAVG(Temperature)
sur les données ci-dessus vous donnera-14.5
, comme le NUL de la ligne est ignoré.SELECT AVG(Temperature)
parce que ce serait fausser vos résultats. NULL n'ont qu'un but utile.null et "" ne sont pas la même chose, donc il n'y a pas de contradiction ici.
Ce que le contenu sémantique d'null/"" est dépend de l'individu et est souvent un "religieux" de l'émission. Pour certaines personnes, dans certains schémas, bien sûr, ils peuvent être les mêmes, mais ils n'ont pas à l'être. Par exemple, un "" peut signifier "j'ai explicitement demandé à l'utilisateur pour l'entrée, et ils ont choisi d'entrer rien", alors qu'un nul pourrait signifier "je n'ai même jamais demandé pour l'entrée".
Il y a une différence entre une valeur nulle et une chaîne vide - au moins en SQL.
La plupart des langages de programmation qui sont en interaction avec une base de données qui n'est pas nativement en charge un NUL qui fonctionne comme il le fait dans une base de données. Par exemple en C#, null <> DbNull.De la valeur. En VB la plupart des types de données ne pouvait pas faire face avec la valeur null de la sémantique, par exemple, vous ne pouviez pas stocker une valeur null dans une Date, ou un Int, etc. En réduisant le nombre de zéros les programmes client le voir, le moins de maux de tête il y a des. Dans le cas de VB, la ferme de la chose qui signifie null pour les chaînes de caractères est Vide, ce qui est quelque chose de plus non-initialisées, pas tout à fait le même sens que la valeur NULL dans le sens de "ne sait pas"
Parce que parfois, dans certaines langues, un "select de la requête" serait vous donner le chaîne NULL, et il faudrait vérifier si c'est une vraie chaîne de contenu "NULL" ou c'est vraiment nul.
Avec "" il est plus facile (à mon humble avis)
Nous n'avons pas autoriser les valeurs null parce que par programmation l'accès à un champ d'une table avec une valeur DBnull provoque une exception, alors une chaîne vide est une valeur et n'a donc pas d'erreur.
En plus de ce que @Piskvor mentionné, cette pratique est aussi là afin de prévenir un certain potentiel NullPointerExceptions dans la logique de l'application lors du remplissage des haricots ou des objets etc. après la lecture de DB