MySQL ignore-t-il les valeurs nulles sur des contraintes uniques?

J’ai une colonne email que je veux être unique. Mais je veux aussi qu’il accepte les valeurs nulles. Ma firebase database peut-elle avoir 2 emails nuls de cette façon?

Oui, MySQL autorise plusieurs NULL dans une colonne avec une contrainte unique.

CREATE TABLE table1 (x INT NULL UNIQUE); INSERT table1 VALUES (1); INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x' INSERT table1 VALUES (NULL); INSERT table1 VALUES (NULL); SELECT * FROM table1; 

Résultat:

 x NULL NULL 1 

Cela n’est pas vrai pour toutes les bases de données. SQL Server, par exemple, n’autorise qu’une seule valeur NULL dans une colonne ayant une contrainte unique.

De la documentation :

“Un index UNIQUE autorise plusieurs valeurs NULL pour les colonnes pouvant contenir NULL”

Ceci s’applique à tous les moteurs sauf BDB .

Pour MySql, les contraintes uniques ignorent les valeurs nulles, mais elles ne devraient pas l’être.

Un commentaire sur le rapport de bogue mysql n ° 8173 indique:

La norme ANSI SQL-92 a décrété que deux valeurs NULL doivent être considérées comme “non distinctes”. La définition de non distinct dans la norme ANSI inclut deux valeurs qui renvoient TRUE pour un test d’égalité ou deux valeurs NULL. C’est pourquoi GROUP BY regroupe tous les NULL en une seule partition.

MySql devrait accepter les valeurs NULL dans le cadre de la contrainte unique.

Je ne sais pas si l’auteur demandait à l’origine si cela permettait ou non des valeurs en double ou s’il y avait une question implicite demandant “Comment autoriser les valeurs NULL dupliquées en utilisant UNIQUE ?” Ou “Comment ne permettre qu’une seule valeur NULL UNIQUE ?”

La question a déjà reçu une réponse, oui, vous pouvez avoir des valeurs NULL double en utilisant l’index UNIQUE .

Depuis que je suis tombé sur cette réponse en cherchant “comment autoriser une valeur NULL UNIQUE “. Pour ceux qui peuvent trébucher sur cette question en faisant de même, le rest de ma réponse est pour vous …

Dans MySQL, vous ne pouvez pas avoir une valeur NULL UNIQUE , cependant vous pouvez avoir une valeur vide UNIQUE en insérant la valeur d’une chaîne vide.

Avertissement: Les valeurs numériques et les types autres que les chaînes peuvent être définis par défaut sur 0 ou sur une autre valeur par défaut.

Évitez les contraintes uniques nullables. Vous pouvez toujours placer la colonne dans une nouvelle table, la rendre non nulle et unique, puis remplir cette table uniquement lorsque vous en avez une valeur. Cela garantit que toute dépendance de clé sur la colonne peut être correctement appliquée et évite tout problème pouvant être causé par des valeurs NULL.