Предполагая, что мы хотим проиндексировать адрес электронной почты, чтобы убедиться, что нет дублирующегося адреса электронной почты и, следовательно, пользователя, вы не можете использовать хеш или сумму, потому что у вас будет коллизия, когда.
Дажеесли это маловероятно - это не значит, что это не может произойти.А когда это происходит - тогда никто не знает, почему программное обеспечение не работает - для этого «конфликтующего пользователя» или, что еще хуже, пользователь может взять учетную запись.
Вот почему я настоятельно рекомендую поставить индекс базы данных.на адрес электронной почты, независимо от того, что.
Это просто и работает во всех случаях независимо.
Создание таблицы позволит избежать дубликатов и легко реализуемо (ключевое слово: "UNIQUE KEY"):
CREATE TABLE IF NOT EXISTS `test` (
`email_address` varchar(250) COLLATE latin1_german2_ci NOT NULL,
UNIQUE KEY `email_address` (`email_address`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
Проверить, существует ли уже запись, также легко:
SELECT * FROM `test` WHERE email_address = "abc@google.com"
Согласно комментарию fyrye, использование выбранной сортировки (заканчивающейся на "ci"(без учета регистра) позволяет хранить с учетом регистра.Но мы не будем вставлять дубликаты адресов электронной почты, которые являются просто разными (верхний / нижний регистр).
Пример: таблица уже содержит запись с адресом электронной почты "AbCd@mysql.com", тогда
INSERT INTO `db1080787-1`.`test` (
`email_address`
)
VALUES (
'abCd@mysql.com'
)
приведет к
#1062 - Duplicate entry 'abCd@mysql.com' for key 'email_address