作者espeondoug (殘雪)
看板Database
標題[SQL ] where =搜尋不到但where like可以
時間Thu Feb 6 00:59:54 2020
資料庫名稱:MySQL
資料庫版本:5.7
內容/問題描述:
小弟有張表是以某個id字串作為索引
id字串可能由英文、中文、數字、跟常見符號的'-' '.'組成
最常做的就是查詢屬於某個id的所有資料筆數
今天突然發現某個id,假設為'abc-T-4.11-moen'
明明就有出現在資料表裡
用select * from table where id = 'abc-T-4.11-moen'查詢
結果為null
但改成where like '%abc-T-4.11-moen'查詢,就有資料了
而且id那欄就是'abc-T-4.11-moen',開頭沒有多別的字元
為什麼用where id =會找不到呢?
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.12.209.184 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1580921996.A.AC9.html
※ 編輯: espeondoug (140.109.73.31 臺灣), 02/06/2020 10:10:56
推 mathrew: 你用 like 找到那筆資料後,把他複製出來看是長怎樣 02/07 07:43
→ konkonchou: 通常是隱藏了特殊符號,可以用char_length 查一下長度 02/07 09:41
→ espeondoug: 有問題的id名稱沒有中文,複製出來看也沒有發現特殊符 02/07 10:09
→ espeondoug: 號,字串長度跟用肉眼數的一樣 02/07 10:10
→ espeondoug: 另外有測試用like找出來的資料獨立建表,再用=查詢就 02/07 10:11
→ espeondoug: 成功了,目前有在想如果把資料撈出來再insert回去是不 02/07 10:12
→ espeondoug: 是就可以 02/07 10:13
推 mered: 直接複製like出來的欄位資料,再原封不動的貼上沒有like的 02/16 10:55
→ mered: 查詢試試看 02/16 10:55
→ sleepghost: 同一樓想法 不要相信你肉眼看到的 02/21 16:43
→ sleepghost: 透過編碼去測試資料 才是真的 02/21 16:44
→ sleepghost: Nchar 或 Nvarchar 皆為unicode每一個字元為兩個bytes 02/21 16:44
→ sleepghost: MSSQL預設為UTF8 因此型態為varchar 或 char 02/21 16:45
→ sleepghost: MySQL就不確定是不是一樣 02/21 16:45
推 cracydancer: 用 len 函數就能知道db 裡有沒有包含其他字元 02/27 22:59
→ cracydancer: 更正,mysql 應是 length 02/27 23:00
→ espeondoug: 有嘗試了複製欄位資料再貼回指令,也用char_length() 03/02 14:45
→ espeondoug: 跟length()計算字串長度,但前者一樣不行,後者的長 03/02 14:45
→ espeondoug: 度數字跟自己數的一樣(沒有中文),因為有問題的id只 03/02 14:45
→ espeondoug: 有這個,而且用like撈得出來,目前已經先作罷了XD 03/02 14:45
→ espeondoug: 感謝樓上大大們熱心回覆 03/02 14:45