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, которую я заметил.
ОБНОВЛЕНИЕ: 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';
Вы должны использовать одинарные кавычки, как описано в MySQL руководство. Посмотрите на последний пример.
Кроме того, вы должны избавиться от « вокруг site
SELECT *
FROM `sites`
WHERE site = 'google.com';
SELECT * FROM `sites` WHERE `site` = 'google.com';
Мой первый ответ:
Используйте одинарные кавычки, 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)
использовать этот
select * from tb_name where col_name1 = 'your_value1' and col_name2 = 'your_value2'
Сделайте резервную копию ваших данных и установите новую настройку вашего mysql … он мог быть поврежден