資料庫名稱: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 找到那筆資料後,把他複製出來看是長怎樣
通常是隱藏了特殊符號,可以用char_length 查一下長度
有問題的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就不確定是不是一樣
用 len 函數就能知道db 裡有沒有包含其他字元更正,mysql 應是 length
有嘗試了複製欄位資料再貼回指令,也用char_length()跟length()計算字串長度,但前者一樣不行,後者的長度數字跟自己數的一樣(沒有中文),因為有問題的id只有這個,而且用like撈得出來,目前已經先作罷了XD感謝樓上大大們熱心回覆