[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