71 votes

SQL Server: chaîne vide VS vide

Comment les valeurs NULL et Varchar vide sont-elles stockées dans SQL Server ? Et au cas où je n'ai aucune entrée d'utilisateur pour un champ string sur mon interface utilisateur , devrais-je stocker un NULL ou un '' ?

65voto

openshac Points 1246

Il y a un bel article ici qui traite de ce point. Clé de choses à emporter sont qu'il n'y a pas de différence dans la taille de la table, cependant, certains utilisateurs préfèrent utiliser une chaîne vide, car il peut faire des requêtes plus facile, car il n'est pas un NULL vérifier à faire. Vous venez de vérifier si la chaîne est vide. Une autre chose à noter est que la valeur NULL signifie dans le contexte d'une base de données relationnelle. Cela signifie que le pointeur vers le champ de caractères est définie à 0x00 dans la ligne d'en-tête, donc pas de données à l'accès.

Mise à jour Il y a un article détaillé ici qui parle de ce qui se passe réellement sur une ligne de base

Chaque ligne a un bitmap null pour les colonnes qui autorise les valeurs null. Si la ligne de cette colonne est null alors un peu de l'image bitmap est 1 sinon 0.

Pour la variable de la taille des types de données de la acctual taille est de 0 octets.

Pour une taille fixe de type de données de la acctual la taille est le type de données par défaut de la taille en octets par défaut la valeur (0 pour les nombres, " pour les caractères).

le résultat de la commande DBCC PAGE montre que les deux NULS et les cordes à vide à la fois prendre le zéro octets.

39voto

Vagif Verdi Points 2380

Soyez prudent avec les valeurs NULL et vérifiez l'inégalité dans le serveur SQL.

Par exemple

 select * from foo where bla <> 'something' 
 

ne renverra PAS les enregistrements où bla est null. Même si cela devrait logiquement.

Donc, la bonne façon de vérifier serait

 select * from foo where isnull(bla,'') <> 'something' 
 

Ce qui bien sûr, les gens oublient souvent et obtiennent ensuite des bugs étranges.

14voto

Hatake Kakashi Points 1223

Une chaîne vide est une chaîne de longueur nulle ou sans caractère. Null est l'absence de données.

1voto

malinois Points 4239

NULL est une non valeur, comme indéfinie. '' est une chaîne vide avec 0 caractères.
La valeur d'une chaîne dans la base de données dépend de votre valeur dans votre interface utilisateur, mais il s'agit généralement d'une chaîne vide '' si vous spécifiez le paramètre dans votre requête ou procédure stockée.

1voto

Alexander Taylor Points 821

si ce n'est pas un champ de clé étrangère, de ne pas utiliser les cordes à vide, vous pourriez économiser quelques difficultés. seulement autoriser les valeurs null si vous allez prendre de la valeur null signifie quelque chose de différent d'une chaîne vide. par exemple, si vous avez un champ de mot de passe, une valeur null pourrait indiquer qu'un nouvel utilisateur n'a pas créé de mot de passe pas encore tout vide varchar pourrait indiquer un mot de passe vide. pour un champ comme "adresse2" autorise les valeurs null ne peut rendre la vie difficile. choses à regarder dehors pour inclure des références nulles et des résultats inattendus de = et <> opérateurs mentionnés par Vagif Verdi, et regarder dehors pour ces choses est souvent inutile programmeur de frais généraux.

edit: si la performance est un problème de voir cette question connexe: Nullable vs non-nulles de données varchar typyes - ce qui est plus rapide pour les requêtes?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X