繁体   English   中英

SQL where子句不起作用

[英]Sql where clause not working

SQL where子句在我的数据库中不起作用。

我有一个名为“站点”的表,其结构如下

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中的问题。

更新:OP在他的数据集中有不可见的换行符(\\ n)。 @EternalPoster(和我)认为Trim会删除所有空格 ,但是MySql Trim文档只指定了前导和尾随空格


这是我所做的:

-- 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 ,因此似乎不是. 字符被用作通配符,但这可能值得一看。

创建一个空数据库,然后尝试运行上面的脚本。 您得到与我相同的结果吗?

使用此查询

select * from sites where site = 'google.com';

我的第一个答案:

使用单引号, SELECT * FROM站点WHERE site = 'google.com';

关于单/双引号语法,这取决于您的SQL模式。 MySQL文档

ANSI_QUOTES模式使服务器将双引号字符串解释为标识符。 因此,启用此模式后,字符串文字必须用单引号引起来。 它们不能用双引号引起来。 如第5.1.6节“服务器SQL模式”中所述,控制服务器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)

您必须使用mysql 手册中所述的单引号。 看最后一个例子。 此外,您应该摆脱`` site周围

SELECT *
FROM `sites`
WHERE site = 'google.com';
SELECT * FROM `sites` WHERE `site` = 'google.com';

用这个

select * from tb_name where col_name1 = 'your_value1' and col_name2 = 'your_value2' 

备份数据并安装全新的mysql安装程序...它可能已损坏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM