Не игнорирует ли MySQL нулевые значения по уникальным ограничениям?

У меня есть столбец электронной почты, который я хочу быть уникальным. Но я также хочу, чтобы он принимал нулевые значения. Может ли моя база данных иметь два нужных письма таким образом?

Ответ 1

Да, MySQL допускает несколько NULL в столбце с уникальным ограничением.

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;

Результат:

x
NULL
NULL
1

Это неверно для всех баз данных. Например, SQL Server допускает только одно значение NULL в столбце с уникальным ограничением.

Ответ 2

От документы:

"УНИКАЛЬНЫЙ индекс допускает множественный NULL значения для столбцов, которые могут содержать NULL"

Это относится ко всем машинам, но BDB.

Ответ 3

Для MySql уникальные ограничения игнорируют нулевые значения, но не должны.

Комментарий отчет об ошибке mysql # 8173 гласит:

Стандарт ANSI SQL-92 постановил, что два значения NULL должны быть считаются "нечеткими". Определение нечеткого в ANSI стандарт включает любые два значения, которые возвращают TRUE для равенства тест или любые два NULL. Вот почему GROUP BY группирует все нули в одиночный раздел.

MySql должен принимать значения NULL как часть уникального ограничения.

Ответ 4

Избегайте обнулять уникальные ограничения. Вы всегда можете поместить столбец в новую таблицу, сделать его непустым и уникальным, а затем заполнить эту таблицу только тогда, когда у вас есть значение для нее. Это гарантирует, что любая ключевая зависимость от столбца может быть правильно применена и устраняет любые проблемы, которые могут быть вызваны ошибками.

Ответ 5

Я не уверен, что автор изначально просто спрашивал, позволяет ли это дублировать значения, или если здесь был подразумеваемый вопрос: "Как разрешить дублирование значений NULL при использовании UNIQUE?"? Или "Как разрешить только одно значение UNIQUE NULL?"

Вопрос уже ответил, да, вы можете иметь дубликаты NULL при использовании индекса UNIQUE.

Так как я наткнулся на этот ответ, ища "как разрешить одно значение UNIQUE NULL". Для всех, кто может наткнуться на этот вопрос, делая то же самое, остальная часть моего ответа будет для вас...

В MySQL вы не можете иметь одно значение UNIQUE NULL, однако вы можете иметь одно UNIQUE пустое значение, вставив со значением пустую строку.

Предупреждение. Числовые и типы, отличные от строки, могут по умолчанию равняться 0 или другому значению по умолчанию.