作者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://webptt.com/cn.aspx?n=bbs/Database/M.1580921996.A.AC9.html
※ 编辑: espeondoug (140.109.73.31 台湾), 02/06/2020 10:10:56
2F:推 mathrew: 你用 like 找到那笔资料後,把他复制出来看是长怎样 02/07 07:43
3F:→ konkonchou: 通常是隐藏了特殊符号,可以用char_length 查一下长度 02/07 09:41
4F:→ espeondoug: 有问题的id名称没有中文,复制出来看也没有发现特殊符 02/07 10:09
5F:→ espeondoug: 号,字串长度跟用肉眼数的一样 02/07 10:10
6F:→ espeondoug: 另外有测试用like找出来的资料独立建表,再用=查询就 02/07 10:11
7F:→ espeondoug: 成功了,目前有在想如果把资料捞出来再insert回去是不 02/07 10:12
8F:→ espeondoug: 是就可以 02/07 10:13
9F:推 mered: 直接复制like出来的栏位资料,再原封不动的贴上没有like的 02/16 10:55
10F:→ mered: 查询试试看 02/16 10:55
11F:→ sleepghost: 同一楼想法 不要相信你肉眼看到的 02/21 16:43
12F:→ sleepghost: 透过编码去测试资料 才是真的 02/21 16:44
13F:→ sleepghost: Nchar 或 Nvarchar 皆为unicode每一个字元为两个bytes 02/21 16:44
14F:→ sleepghost: MSSQL预设为UTF8 因此型态为varchar 或 char 02/21 16:45
15F:→ sleepghost: MySQL就不确定是不是一样 02/21 16:45
16F:推 cracydancer: 用 len 函数就能知道db 里有没有包含其他字元 02/27 22:59
17F:→ cracydancer: 更正,mysql 应是 length 02/27 23:00
18F:→ espeondoug: 有尝试了复制栏位资料再贴回指令,也用char_length() 03/02 14:45
19F:→ espeondoug: 跟length()计算字串长度,但前者一样不行,後者的长 03/02 14:45
20F:→ espeondoug: 度数字跟自己数的一样(没有中文),因为有问题的id只 03/02 14:45
21F:→ espeondoug: 有这个,而且用like捞得出来,目前已经先作罢了XD 03/02 14:45
22F:→ espeondoug: 感谢楼上大大们热心回覆 03/02 14:45