Maison > Article > base de données > Comment MySQL détermine-t-il si un champ est nul ?
Je crois que de nombreuses personnes qui utilisent MySQL depuis longtemps ne comprennent pas très bien les concepts de ces deux attributs de champ. Elles se posent généralement les questions suivantes :
Mon type de champ n'est pas nul, pourquoi. puis-je insérer des valeurs nulles ?
Pourquoi null n'est-il pas plus efficace que null
Lorsque nous jugeons qu'un champ n'est pas vide, devons-nous sélectionner * dans la table où la colonne <> '' ou devrions-nous utiliser select * from table où la colonne n'est pas encore nulle.
Avec les questions ci-dessus, examinons en profondeur la différence entre nul et non nul.
Tout d'abord, nous devons comprendre les concepts de "valeur nulle" et "NULL":
La valeur nulle n'occupe pas d'espace
NULL dans MySQL occupe en fait de l'espace Oui, voici l'explication officielle de MYSQL :
« Les colonnes NULL nécessitent un espace supplémentaire dans la ligne pour enregistrer si leurs valeurs sont NULL. Pour les tables MyISAM, chaque colonne NULL prend un bit supplémentaire, arrondi à l'unité supérieure. à l'octet le plus proche."
Par exemple, vous avez une tasse. Une valeur nulle signifie que la tasse est sous vide, et NULL signifie que la tasse est remplie d'air. Bien que la tasse semble vide, Mais la différence est énorme.
Après avoir compris les concepts de « valeur nulle » et « NULL », le problème est fondamentalement clair. Testons-le avec un exemple :
CREATE TABLE `test` ( `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ) ENGINE = MYISAM ;
Insérer des données :
INSERT INTO `test` VALUES (null,1);.
Une erreur MySQL s'est produite :
#1048 - Column 'col1' cannot be null
Un autre
INSERT INTO `test` VALUES ('',1);
a été inséré avec succès.
On peut voir que "NULL" ne peut pas être inséré dans les champs NON NULL, seules les "valeurs nulles" peuvent être insérées, et la question ci-dessus a la réponse.
Concernant le problème, comme nous l'avons dit ci-dessus, NULL n'est pas réellement une valeur nulle, mais prend de la place. Par conséquent, lorsque mysql effectuera une comparaison, NULL participera à la comparaison des champs, cela affectera donc partiellement l'efficacité. .
Et Les index B-tree ne stockeront pas les valeurs NULL, donc si les champs indexés peuvent être NULL, l'efficacité de l'indexation diminuera considérablement.
MYSQL recommande que les attributs de colonne soient NOT NULL autant que possible.
Vérification de la longueur : Notez qu'il n'y a pas d'espaces entre les '' des valeurs nulles.
mysql> select length(''),length(null),length(' '); +------------+--------------+--------------+ | length('') | length(null) | length(' ') | +------------+--------------+--------------+ | 0 | NULL | 2 | +------------+--------------+--------------+
Remarque :
Lorsque count() est utilisé pour compter le nombre d'enregistrements dans une colonne, si la valeur NULL est utilisée, le système l'ignorera automatiquement , mais s'il est vide, la valeur y sera comptée.
Pour juger NULL, utilisez IS NULL ou IS NOT NULL Vous pouvez utiliser la fonction ifnull() dans les fonctions d'instruction SQL pour traiter. process
Considérations particulières pour MySQL, pour le type de données timestamp, si vous insérez une valeur NULL dans une colonne insérée dans ce type de données, la valeur qui apparaît est l'heure système actuelle. Si vous insérez une valeur nulle, 0000-00-00 00:00:00
apparaîtra. Le fait d'utiliser est nul ou ='' pour juger de la valeur nulle dépend de l'entreprise réelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!