Sql, где пункт не работает

SQL, где предложение не работает в моей базе данных.

У меня есть таблица под названием «сайты» и такая структура

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, которую я заметил.

-1

Решение

ОБНОВЛЕНИЕ: 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 для регулярных выражений, так что не похоже, что . символ используется в качестве символа подстановки, но это может стоить посмотреть.

Создайте пустую базу данных и попробуйте запустить мой скрипт выше. Вы получаете тот же результат, что и я?

5

Другие решения

используйте этот запрос

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

Вы должны использовать одинарные кавычки, как описано в MySQL руководство. Посмотрите на последний пример.
Кроме того, вы должны избавиться от « вокруг site

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

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

Мой первый ответ:

Используйте одинарные кавычки, SELECT * FROMместаWHEREсайт= 'google.com';

Что касается синтаксиса одинарных / двойных кавычек, это зависит от вашего режима SQL. От MySQL документация:

Режим ANSI_QUOTES заставляет сервер интерпретировать двойные кавычки
Строки как идентификаторы. Следовательно, когда этот режим включен,
строковые литералы должны быть заключены в одинарные кавычки. Oни
не может быть заключен в двойные кавычки. Режим SQL сервера
управляется, как описано в Разделе 5.1.6, «Режимы SQL сервера».

Мой второй ответ после редактирования ОП:

После просмотра снимков экрана, похоже, что у вас есть пустая строка над URL в вашей базе данных или пустом месте. Вам нужно будет удалить его вручную или с ОТДЕЛКА.

Чтобы проверить, есть ли пробелы, вы можете использовать подстановочный знак:

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)
1

использовать этот

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

Сделайте резервную копию ваших данных и установите новую настройку вашего mysql … он мог быть поврежден

-1
По вопросам рекламы [email protected]