J'ai une table où certaines lignes ont des cells
vides. J'ai essayé de sélectionner de telles lignes en utilisant la fonction IS NULL. Mais la requête sélectionne 0 lignes.
select * from zzz_fkp_registration_female where fname is null; (0 row(s) affected)
Maintenant, j'ai changé ma requête pour:
select * from zzz_fkp_registration_female where fname is null or fname ='';
J'ai obtenu le résultat souhaité.
Pourquoi IS NULL ne donne-t-il pas le résultat? Quelle est la différence entre IS NULL
et ''
puisque les cellules sont vides. S'il vous plaît, expliquez.
Quelques différences entre eux:
NULL
peut être affecté à n'importe quel type, par opposition à une string vide qui ne sera pas compatible avec les champs date / numérique. NULL
est une valeur INCONNUE, elle n'a pas de valeur par opposition à une string vide, qui est une valeur, mais vide. NULL
ne devrait pas capturer la memory par opposition à une string vide qui le fait. null = null
produira null
par opposition à ''=''
ce qui donnera TRUE
. Vous pouvez faire modifier votre requête comme suit:
select * from zzz_fkp_registration_female where isnull(fname,'') = '';
Cette requête entraînera toutes les cellules vides ainsi que la cellule avec des valeurs nulles.
Remarque:
Il ne peut pas find NULL car il n'a pas de valeur
Une string vide est une valeur, mais c'est vide.
Seulement si c'est une valeur qu'il peut comparer avec une autre valeur
Null est une absence de valeur. Une string vide est une valeur, mais est simplement vide.
Null est spécial pour une database.
En utilisant NULL, vous pouvez faire la distinction entre "ne pas mettre de données" et "mettre des données vides".
Quelques autres différences:
Une LONGUEUR de NULL est NULL, une LONGUEUR d'une string vide est 0. Les NULL sont sortingés avant les strings vides. COUNT (message) count les strings vides mais pas les valeurs NULL Vous pouvez searchr une string vide en utilisant une variable liée mais pas pour une valeur NULL. Cette requête:
SELECT * FROM mytable WHERE mytext = ?
ne correspondra jamais à une valeur NULL dans mytext, quelle que soit la valeur que vous passez du client. Pour faire correspondre les valeurs NULL, vous devrez utiliser une autre requête
SELECT * FROM mytable WHERE mytext IS NULL