2015-04-29 2 views
0

Я пытаюсь сделать запрос MySQL SELECT, на столе, который выглядит немного как это:SQL Select - где поисковый запрос содержит '.'

------------------------------- 
| id | domain  | etc... 
|------+--------------+-------- 
| 1 | dev.howmuch | 
|------+--------------+-------- 
| 2 | devhowmuch | 

На данный момент я просто пытаюсь сделать простой

SELECT * FROM `tbl_swad_apps` WHERE `domain` = 'devhowmuch' 

, который работает хорошо, однако, как только я пытаюсь

SELECT * FROM `tbl_swad_apps` WHERE `domain` = 'dev.howmuch' 

он не возвращает никаких результатов, мой догадываясь, что он пытается лечить fullstop в качестве шаблона или в виде ссылки на таблицу (table. field).

Как я могу получить его для запроса только как строку? Спасибо

EDIT: Я ценю ребята помощи, но ни один из них не работает: Не существует конечных или ведущих пробелов. Если я попробую LIKE '%howmuch%', оба результата появятся, если я сделаю LIKE '%.howmuch%' ничего не получается.

шестигранный (домен) результат по запросу:

1 dev.howmuch 646576A9686F776D756368 
2 devhowmuch 646576686F776D756368 
+1

Пожалуйста, запустите 'SELECT id, domain, hex (domain) FROM tbl_swad_apps' и обновите вопрос с результатами. В '' '' '' '' '' '' '' '' '' '' '' не бывает, и, конечно, SQL не ищет имена таблиц внутри строковых литералов. Это также может помочь определить точное определение таблицы. –

ответ

2

Клетка содержит следующее:

d e v . h o w m u c h 
64 65 76 A9 68 6F 77 6D 75 63 68 

Full stop, вероятно, следует 2E (это 7-битный ASCII символы, так что те же самые байты во многих кодировках, включая UTF-8):

mysql> SELECT HEX('.'); 
+----------+ 
| HEX('.') | 
+----------+ 
| 2E  | 
+----------+ 
1 row in set (0.00 sec) 

Но вы есть A9. Это не 7-разрядный символ ASCII, и мы не знаем, что кодирует ваши данные, поэтому мы не можем сказать, что это (но это явно не точка). В ISO-8859-1 и Windows-1252 это будет символ авторского права (©). В UTF-8 это будет недопустимый символ, который обычно отображается как REPLACEMENT CHARACTER (& # xFFFD;) многими клиентами.

+0

Это действительно странно, если я делаю то же самое 'HEX ('.')' Command Я получаю '2E', как вы. Но всякий раз, когда я запрашиваю таблицу, я получаю A9. Независимо от того, сколько раз я обновляю (через phpmyadmin или терминал) – James

+0

Почему вы использовали 'UNHEX' 2A вместо A9? Для A9 я получаю ©. –

+0

Я задавался вопросом, но это помогло. Я сделал запрос вставки с помощью 'UNHEX', и это решило проблему. На самом деле не уверен, почему это произошло в первую очередь, но оно всегда показывало «dev.howmuch» в любых других результатах запроса ... странно. Спасибо за помощь! – James

1

Вы не честны.

Нет проблем с периодом.

Вот доказательство: http://sqlfiddle.com/#!9/2e380/1

Проблема должна быть с реальным значением в таблице, включают в себя некоторые символы непечатаемые.

Итак, вы можете выбрать - исправить значение в таблице.

Или использовать другой запрос, как:

SELECT * FROM `tbl_swad_apps` WHERE `domain` LIKE '%dev.howmuch%'; 

или даже:

SELECT * FROM `tbl_swad_apps` WHERE `domain` LIKE '%dev%.%howmuch%'; 

http://sqlfiddle.com/#!9/2e380/4

+0

Да, там, наверное, есть место в конце или что-то в этом роде. – ceejayoz

+0

Нет. Нет пробелов, я вижу, что это работает на вашей скрипке, но не в моем phpmyadmin. Как вы видите это в моем вопросе именно так, как это происходит в моей настройке – James

+0

попробуйте 'SELECT *, LENGTH (домен) FROM \' tbl_swad_apps \ '' и длина проверки равна 11 – Alex

0

Если там может быть ведущий/ведомые пробелы вы можете сделать это:

SELECT * FROM `tbl_swad_apps` WHERE `domain` = LTRIM(RTRIM('dev.howmuch')) 
Смежные вопросы