SQL SELECT 查询不适用于电子邮件地址

SQL SELECT query not working with Email Addresses

我正在尝试查询存储在我的数据库中的用于登录的电子邮件地址。当我尝试在 PHPMyAdmin 中使用 SQL 进行查询时,PHP 中的查询出现问题,它 returns 是一个空集。在做了一些测试后,我确定了以下电子邮件 something@gmail.com:

作品:

SELECT * FROM `Careers` WHERE `Email` LIKE '%something%' and

SELECT * FROM `Careers` WHERE `Email` LIKE '%gmail.com%' and

SELECT * FROM `Careers` WHERE `Email` LIKE '%@%'.

无效:

SELECT * FROM `Careers` WHERE `Email` LIKE 'something@gmail.com' and

SELECT * FROM `Careers` WHERE `Email` LIKE '%something@gmail.com%' and

SELECT * FROM `Careers` WHERE `Email` LIKE '%@gmail.com%'

SELECT * FROM `Careers` WHERE `Email` LIKE '%something%gmail.com'

我完全不知道如何纠正这个问题。我唯一能想到的是 @ 符号的问题,因为当我添加 @ 符号时查询似乎失败了。如果您能提供任何帮助,我们将不胜感激!

你确定它不起作用吗?在这里查看它有效的证明 http://sqlfiddle.com/#!9/26b00/4。但是您应该稍微更改一下查询,如下所示

SELECT * FROM table1 WHERE `Email` = 'something@gmail.com' -- No need of LIKE operator

SELECT * FROM table1 WHERE `Email` = 'something@gmail.com' -- No need of LIKE operator

SELECT * FROM table1 WHERE `Email` LIKE '%@gmail.com' -- search before string

SELECT * FROM table1 WHERE `Email` LIKE 'something_gmail.com' -- search a single char

编辑:

根据您的最新评论,您的整理 armscii8_general_ci 是这里的问题。例如创建 table like

CREATE TABLE Table1
    (`email` varchar(19) collate armscii8_general_ci)
;

INSERT INTO Table1
    (`email`)
VALUES
    ('something@gmail.com')
;

在下面做一个select * ... returns;如您所见,. 变成了 © 类型的版权符号,这就是带有 LIKE 运算符的通配符不起作用的原因。

something@gmail©com

将您的查询更改为使用 _ 通配符和 LIKE 运算符来匹配任何单个字符,它将正常工作。参见 http://sqlfiddle.com/#!9/ec46f/8

SELECT * FROM Table1 WHERE `Email` LIKE 'something@gmail_com'; 

使用正则表达式的力量!只是一个 where 语句来解决这个问题:

select * from site_form
where email REGEXP '^[A-Za-z0-9._%\-+!#$&/=?^|~]+@[A-Za-z0-9.-]+[.][A-Za-z]+$';