Chaîne vide vs NULL

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.
  • Pour autant que je sache, 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:

  1. Les valeurs NULL représentent des données inconnues manquantes.
  2. Les données vierges sont des données réelles inputs en blanc pendant la saisie.

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.

  • Null n'a pas de limite, il peut être utilisé pour les champs ssortingng, integer, date, etc. dans une database.
  • NULL ne se voit allouer aucune memory, la string avec la valeur NUll est juste un pointeur qui pointe vers nulle part en memory. cependant, Empty IS est affecté à un location de memory, bien que la valeur stockée dans la memory soit "".

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