web-dev-qa-db-fra.com

Chaîne vide vs NULL

J'ai une table où certaines lignes ont un cells vide. J'ai essayé de sélectionner de telles lignes en utilisant la fonction IS NULL. Mais la requête sélectionne 0 ligne. 

select * from zzz_fkp_registration_female where fname is null;
(0 row(s) affected)

Maintenant, j'ai changé ma requête en:

select * from zzz_fkp_registration_female where fname is null or fname ='';

J'ai 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.

8
nischalinn

Quelques différences entre eux:

  • NULL peut être affecté à tout type, par opposition à une chaîne vide qui ne sera pas compatible avec les champs de date/numériques.
  • NULL est une valeur UNKNOWN, elle n'a pas de valeur par opposition à une chaîne vide, qui est une valeur, mais vide.
  • Autant que je sache, NULL ne devrait pas capturer de la mémoire, contrairement à une chaîne vide.
  • null = null donnera null au lieu de ''='' qui donnera TRUE.
12
sagi
  • Null est une absence de valeur. Une chaîne vide est une valeur, mais est simplement vide. 

  • Null est spécial pour une base de données.

  • Null n'a pas de limite, il peut être utilisé pour les champs chaîne, entier, date, etc. d'une base de données.
  • NULL n'est alloué à aucune mémoire, la chaîne avec la valeur NUll est simplement un pointeur qui ne pointe nulle part en mémoire. Toutefois, Vide IS est affecté à un emplacement de mémoire, bien que la valeur stockée dans la mémoire 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 chaîne vide est 0 . NULL sont triés avant les chaînes vides . COUNT (message) comptera des chaînes vides, mais pas NULLsVous pouvez rechercher un vide chaîne en utilisant une variable liée, mais pas pour un NULL. Cette requête:

SELECT  *
FROM    mytable 
WHERE   mytext = ?

ne correspondra jamais à une valeur NULL dans mytext, quelle que soit la valeur transmise par le client. Pour faire correspondre les valeurs NULL, vous devrez utiliser une autre requête

SELECT * FROM mytable WHERE mytext IS NULL

2
mansi

Il ne peut pas trouver NULL car il n'a pas de valeur

Une chaîne vide est une valeur, mais elle est vide.

Seulement si c'est une valeur, il peut être comparé avec une autre valeur

1
Jelle Botman

Vous pouvez modifier votre requête comme ci-dessous:

select * from zzz_fkp_registration_female where isnull(fname,'') = '';

Cette requête entraînera toutes les cellules vides ainsi que les cellules avec des valeurs NULL.

Remarque:

  1. Les valeurs NULL représentent des données inconnues manquantes.
  2. Les données vierges sont les données réelles entrées vierges lors de la saisie.
1
Paresh J