У вас не может быть более двух уникальных полей в таблице, или я делаю что-то неправильно здесь?
У меня есть 1 уникальный ключ для имени пользователя, и я хочу его для электронной почты, но я получаю
#1062 - Duplicate entry '' for key 'email'
alter table users
add unique (email)
Tbl:
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(40) NOT NULL,
`email` varchar(100) NOT NULL,
`registered` int(11) unsigned NOT NULL DEFAULT '0',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
Сообщается, что у вас уже есть уникальные записи в поле электронной почты, а именно: значение '' (пустая строка)
В столбце email
в одном столбце содержится то же значение (т.е. ''
). Это означает, что вы не можете поместить ограничение UNIQUE
в этот столбец.
Вы можете сделать столбец нулевым, а затем обновить значение до NULL, где он в настоящее время ''
, а затем создать ограничение UNIQUE
на нем, потому что UNIQUE
разрешает null.
ALTER TABLE users MODIFY email VARCHAR(100);
UPDATE users SET email = NULL WHERE email = '';
ALTER TABLE users ADD UNIQUE KEY (email);
Кстати, почему у вас есть значение ''
в столбце электронной почты? Это не действительный адрес электронной почты.
Это означает, что (как минимум) 2 записи имеют пустое электронное письмо.
Помните: NULL!= ''
Чтобы найти их:
SELECT id FROM users WHERE email= '';
Никакое значение не считается уникальным, поэтому две строки электронной почты с ничем не повторяются, если их судить по уникальному стандарту.
У вас может быть несколько уникальных полей.
Я думаю, что ошибка связана с данными в поле электронной почты. (Я думаю, что у вас более одной строки со значением '')