appid 为1234567
select * from bills where appid = 1234567
和select * from bills where appid like '%1234567%'结果不一样!,前一句少了很多数据
猜想是数据中肯定存在某些肉眼不可见的字符。
于是:select hex(appid), appid where appid like '%1234567%'
发现多了一个值为EFBBBF的十六进制字符,因为数据本身就是从其他地方导入的,遇到这种隐秘问题真心恶心。
在windows系统里打开计算器,程序猿类型的计算器中输入EFBBBF,换算成十进制为15,711,167
update `bills` set appid = replace(appid,char(15711167),'')
排查程序搞了4个多小时,竟然是这么狗血的问题,这坑爬的,时间成本有点大。
PS:遇到类似情况的朋友,操作前,记得备份数据库,以免造成不必要的损失!
后来修改了导入数据的程序,使用正则表达式把肉眼不可见的字符全部过滤掉再导入。
其实程序里做过一次过滤,但是,实施导入的时候,鬼斧神工般的用原始数据导入了数据库而没有使用过滤过的数据进行导入。就造成了这么隐秘的问题。