2013-04-22 87 views
3

假設我們在id = 1的'訂單'表中有記錄。此查詢:MySQL:使用字符串參數搜索數字列

SELECT * FROM 'orders' WHERE id = 'abc1' 

將不會返回上述記錄。但是這個查詢:

SELECT * FROM 'orders' WHERE id = '1abc' 

將返回id = 1的記錄。這是因爲當MySQL將字符串轉換爲數字'abc1'變爲0,但'1abc'變爲1.有沒有一種很好的方法來使MySQL嚴格搜索帶有查詢id的記錄,即不會返回id = 1的記錄上述情況?

+0

你可以讓'id'作爲'varchar'但那麼它不會成爲一個ID的實際目的.. – auicsc 2013-04-22 17:59:32

+0

'abc1'或'1abc'來自哪裏,爲什麼不驗證和消毒搜索參數?查詢如'SELECT * FROM'命令'WHERE id ='123IReallyDoNotCareIfThisIsARealNumberOrNot''的用途是什麼目的? – 2013-04-22 18:17:26

回答

6

怎麼樣使用:

SELECT * FROM 'orders' WHERE id LIKE '1abc' COLLATE utf8_bin 

甚至

SELECT * FROM 'orders' WHERE STRCMP(id, '1abc') = 0; 
+1

+1。 。 。第一種方法的優點是它將在'id'上使用索引。 – 2013-04-22 18:11:40

+0

確實比我的優越,那第一個,由於關鍵用法投票,刪除我的;) – Wrikken 2013-04-22 21:18:48