2015-04-29 35 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' 

它不返回任何結果,我的猜測是,它試圖把該句點作爲通配符或表引用(tablefield)。

我怎樣才能得到它純粹作爲一個字符串?謝謝

編輯:我欣賞幫助傢伙,但這些都沒有工作: 沒有尾隨或領先的空間。如果我嘗試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(�)。

+0

這真的很奇怪,如果我這樣做'HEX('。')'命令我得到'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'))