241 votes

MySQL, mieux vaut insérer NULL ou chaîne vide ?

J’ai un formulaire sur un site Web qui a beaucoup de différents domaines. Certains champs sont facultatifs, tandis que certains sont obligatoires. Dans mon PB, j’ai une table qui contient toutes ces valeurs, est il mieux pratiquer pour insérer une valeur NULL ou une chaîne vide dans les colonnes de DB où l’utilisateur n’a pas mis n’importe quelles données ?

226voto

Quassnoi Points 191041

En utilisant NULL vous pouvez faire la distinction entre mis "pas de données" et de "mettre de données vide".

Certains plus de différences:

  • Un LENGTH de NULL est NULL, LENGTH d'une chaîne vide est - 0.

  • NULLs sont classés avant les chaînes vides.

  • COUNT(message) comptera les cordes à vide, mais pas NULLs

  • Vous pouvez rechercher une chaîne vide à l'aide d'une variable liée, mais pas pour un NULL. Cette requête:

    SELECT  *
    FROM    mytable 
    WHERE   mytext = ?
    

    n'égaleront jamais une NULL en mytext, quelle que soit la valeur de vous transmettre de la part du client. Pour correspondre NULLs, vous aurez à utiliser une autre requête:

    SELECT  *
    FROM    mytable 
    WHERE   mytext IS NULL
    

46voto

Matt Solnit Points 13528

Une chose à considérer, si vous jamais plan sur bases de données, de commutation est que Oracle ne supporte pas les chaînes vides. Ils sont automatiquement convertis avec la valeur NULL, et vous ne pouvez pas interroger pour eux à l’aide des clauses comme `` .

10voto

mdorseif Points 7473

Une chose à garder à l’esprit est que NULL pourrait rendre votre codepaths beaucoup plus difficile. En Python par exemple la plupart des bases de données adaptateurs / ORM carte à .

Si des choses comme :

risque d’entraîner « Hello, aucun Joe Doe ! » Pour l’éviter, il faut quelque chose comme ce code :

Qui peut rendre les choses beaucoup plus complexes.

6voto

Platinum Azure Points 22380

Je ne sais pas quelles sont les bonnes pratiques serait ici, mais je voudrais généralement commis une erreur en faveur de l'null sauf si vous voulez null pour signifier quelque chose de différent de vide-chaîne, et l'entrée de l'utilisateur correspond à votre vide-définition de la chaîne.

Notez que je suis en train de dire que VOUS devez définir la façon dont vous voulez qu'ils soient différents. Parfois, il est logique de les avoir différents, parfois ça ne marche pas. Si non, il suffit de choisir un et de s'y tenir. Comme je l'ai dit, j'ai tendance à privilégier la valeur NULL, la plupart du temps.

Oh, et garder à l'esprit que si la colonne est null, le résultat est moins susceptible d'apparaître dans pratiquement n'importe quelle requête qui sélectionne (a une clause where en SQL) basés sur colonne, sauf si la sélection est pour une colonne null, bien sûr.

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