[SQL ] where =搜尋不到但where like可以

作者: espeondoug (殘雪)   2020-02-06 00:59:54
資料庫名稱: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 =會找不到呢?
感謝
作者: kyrc (橘子)   2020-02-06 10:33:00
作者: mathrew (Joey)   2020-02-07 07:43:00
你用 like 找到那筆資料後,把他複製出來看是長怎樣
作者: konkonchou (卡卡貓)   2020-02-07 09:41:00
通常是隱藏了特殊符號,可以用char_length 查一下長度
作者: espeondoug (殘雪)   2020-02-07 10:09:00
有問題的id名稱沒有中文,複製出來看也沒有發現特殊符號,字串長度跟用肉眼數的一樣另外有測試用like找出來的資料獨立建表,再用=查詢就成功了,目前有在想如果把資料撈出來再insert回去是不是就可以
作者: mered (mered)   2020-02-16 10:55:00
直接複製like出來的欄位資料,再原封不動的貼上沒有like的查詢試試看
作者: sleepghost (雞蛋糕)   2020-02-21 16:43:00
同一樓想法 不要相信你肉眼看到的透過編碼去測試資料 才是真的Nchar 或 Nvarchar 皆為unicode每一個字元為兩個bytesMSSQL預設為UTF8 因此型態為varchar 或 charMySQL就不確定是不是一樣
作者: cracydancer (穿封星文)   2020-02-27 22:59:00
用 len 函數就能知道db 裡有沒有包含其他字元更正,mysql 應是 length
作者: espeondoug (殘雪)   2020-03-02 14:45:00
有嘗試了複製欄位資料再貼回指令,也用char_length()跟length()計算字串長度,但前者一樣不行,後者的長度數字跟自己數的一樣(沒有中文),因為有問題的id只有這個,而且用like撈得出來,目前已經先作罷了XD感謝樓上大大們熱心回覆

Links booklink

Contact Us: admin [ a t ] ucptt.com