我正在尝试查询存储在我的数据库中的电子邮件地址以进行登录。我在PHP中遇到查询问题,当我在PHPMyAdmin中尝试使用SQL查询时,它返回一个空集。在做了一些测试后,我确定了以下内容,发送了一封电子邮件:something@gmail.com:
使用:
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'
不起作用:
cout<< package.nick << " : " << package.buff << endl;
我完全迷失了如何纠正这个问题。我能想到的唯一想法就是@符号的问题,因为当我添加@符号时,查询似乎失败了。非常感谢您提供的任何帮助!
答案 0 :(得分:3)
你确定它不起作用吗?请在此处查看证明其有效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
就是问题所在。例如,创建类似
CREATE TABLE Table1
(`email` varchar(19) collate armscii8_general_ci)
;
INSERT INTO Table1
(`email`)
VALUES
('something@gmail.com')
;
select * ...
返回以下内容;您可以看到.
转为©
种版权符号,这就是为什么带有LIKE
运算符的通配符无效的原因。
something@gmail©com
将您的查询更改为使用_
wilcard与LIKE
运算符匹配任何单个字符,它将正常工作。见http://sqlfiddle.com/#!9/ec46f/8
SELECT * FROM Table1 WHERE `Email` LIKE 'something@gmail_com';