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]+$';
我正在尝试查询存储在我的数据库中的用于登录的电子邮件地址。当我尝试在 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]+$';