[英]SQL SELECT query not working with Email Addresses
我正在嘗試查詢存儲在我的數據庫中的電子郵件地址以進行登錄。 我在 PHP 中遇到查詢問題,當我在 PHPMyAdmin 中嘗試使用 SQL 進行查詢時,它返回一個空集。 在做了一些測試之后,我為 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
是這里的問題。 例如創建如下表
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';
使用正則表達式! 只是一個 where 語句來解決這個問題:
select * from site_form
where email REGEXP '^[A-Za-z0-9._%\-+!#$&/=?^|~]+@[A-Za-z0-9.-]+[.][A-Za-z]+$';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.