SQL where子句在我的数据库中不起作用。
我有一张名为" sites"和那样的结构
id site
1 xyz.com
2 google.com
3 example.com
我正在运行此SQL查询
SELECT * FROM `sites` WHERE `site` = "google.com";
但是我得到了这个输出
MySQL returned an empty result set (i.e. zero rows). (Query took 0.0009 sec)
我以前从未见过这样的生活。
更新:截图
我不想在项目中应用此查询。
SELECT * FROM `sites` WHERE `site` LIKE "%google.com%";
#
真正的问题在于创建数据库的insert
命令。
尝试
INSERT INTO sites (id, site) VALUES (1, '\nxyz.com\n'), (2, '\ngoogle.com\n'), (3, '\nexample.com\n')
并手动检查表中的记录。你不会看到换行符。这是SQL I中注意到的一个问题。
答案 0 :(得分:5)
更新:OP在他的数据集中有不可见的换行符(\ n)。 @EternalPoster(和我)认为Trim将删除所有空格,但MySql Trim Documentation指定领先&尾随仅限空格。
这就是我所做的:
-- for http://stackoverflow.com/questions/27203169/sql-query-not-work-for-google-com
-- and http://stackoverflow.com/questions/27202157/sql-where-clause-not-working
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
-- --------------------------------------------------------
DROP TABLE IF EXISTS `sites`;
--
-- structure for table `sites`
--
CREATE TABLE IF NOT EXISTS `sites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`site` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- data for table `sites`
--
INSERT INTO `sites` (`id`, `site`) VALUES
(1, 'xyz.com'),
(2, 'google.com'),
(3, 'example.com');
--
-- select google
--
SELECT *
FROM sites
WHERE site = 'google.com'
;
--
-- select google
--
SELECT *
FROM sites
WHERE site = 'google.com'
;
这就是我得到的:
所以在我的情况下,我看到脚本按预期运行。
您的案件有何不同?
我的安装是一个相当默认的设置。
Like '%google.com%'
适用于您的数据集的事实表明了一些事情。人们已经建议TRIM
,因为Like表达式将匹配不可见的字符(空格,制表符,退格键,空值)。 MySQL对正则表达式有一个单独的运算符REGEXP,因此似乎不会将.
字符用作通配符,但这可能值得一看。
创建一个空数据库并尝试运行上面的脚本。你得到了同样的结果吗?
答案 1 :(得分:2)
使用此查询
select * from sites where site = 'google.com';
答案 2 :(得分:1)
我的第一个回答:
使用单引号,SELECT * FROM
网站WHERE
网站= 'google.com';
关于单引号/双引号语法,它取决于您的SQL模式。来自MySQL documentation:
ANSI_QUOTES模式使服务器解释双引号 字符串作为标识符因此,启用此模式时, 字符串文字必须用单引号括起来。他们 不能用双引号括起来。服务器SQL模式 按第5.1.6节“服务器SQL模式”中所述进行控制。
OP编辑后的第二个答案:
看到屏幕截图后,您的数据库或空格中的URL上方看起来有一个空行。您需要手动或使用TRIM删除它。
要测试是否有空格,可以使用通配符:
SELECT `site` FROM `sites` WHERE `site` LIKE '%google.com%'
如果你得到一个结果,你知道有空格。如果你想在不永久删除空格的情况下解决问题:
SELECT TRIM(site) FROM `sites` WHERE `site` LIKE '%google.com%'
要从一行中永久删除空格:
UPDATE `sites` SET `site` = TRIM(site) WHERE `site` LIKE '%google.com%'
要永久删除所有行中的空白(首先备份表),您可以执行以下操作:
UPDATE `sites` SET `site` = TRIM(site)
答案 3 :(得分:1)
你必须使用mysql manual中描述的单引号。看看最后一个例子。
此外,你应该摆脱“围绕site
SELECT *
FROM `sites`
WHERE site = 'google.com';
答案 4 :(得分:1)
SELECT * FROM `sites` WHERE `site` = 'google.com';
答案 5 :(得分:0)
使用此
select * from tb_name where col_name1 = 'your_value1' and col_name2 = 'your_value2'
答案 6 :(得分:-1)
备份您的数据并安装新的mysql设置......它可能已损坏