1

方法#1(全文):

CREATE TABLE `addresses` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `mail` text NOT NULL,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `mail` (`mail`)
);

通过搜索找出存在:

SELECT * FROM addresses WHERE MATCH(email) AGAINST('"name@example.com"' IN BOOLEAN MODE)

或方法#2(唯一的varchar):

CREATE TABLE `addresses` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `mail` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `mail` (`mail`)
);

用插入找出存在:

INSERT INTO `addresses` (`id`, `mail`) VALUES (NULL ,  'name@example.com');

如果失败则存在:

#1062 - Duplicate entry 'name@example.com' for key 2 

哪种方法更适合找出数千行中存在的邮件地址?

4

1 回答 1

0

方法 3(使用唯一的 varchar)更好:

SELECT * FROM addresses WHERE email = 'name@example.com'

全文搜索完全匹配并不是一个好主意,并且使用插入来测试是否存在某些东西是错误的(尽管如果您打算无论如何都插入它是正确的)。

请注意,唯一约束可能不区分大小写,具体取决于编码。如果您使用 utf-8-bin 它将是碱基敏感的。

于 2012-12-06T23:52:39.300 回答