-1

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

4

7 回答 7

5

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

创建一个空数据库并尝试在上面运行我的脚本。你得到和我一样的结果吗?

于 2014-11-29T15:23:18.543 回答
2

使用这个查询

select * from sites where site = 'google.com';
于 2014-11-29T12:28:18.070 回答
1

我的第一个答案:

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

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

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)
于 2014-11-29T12:24:14.323 回答
1

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

SELECT *
FROM `sites`
WHERE site = 'google.com';
于 2014-11-29T12:27:16.387 回答
1
SELECT * FROM `sites` WHERE `site` = 'google.com';
于 2014-11-29T12:50:43.207 回答
0

用这个

select * from tb_name where col_name1 = 'your_value1' and col_name2 = 'your_value2' 
于 2014-11-29T12:31:57.220 回答
-1

备份您的数据并安装全新的 mysql 设置...它可能已损坏

于 2014-11-29T12:31:15.857 回答