前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >写了7年代码,第一次见这么狗血的小Bug!

写了7年代码,第一次见这么狗血的小Bug!

作者头像
程序员鱼皮
发布2023-08-09 08:17:18
1930
发布2023-08-09 08:17:18
举报
文章被收录于专栏:鱼皮客栈鱼皮客栈

刚刚修我们鱼聪明 AI 助手平台的一个 Bug,结局很狗血!赶紧给大家分享一下,顺便也分享下标准的排查 Bug 思路。

事情是这样的,有小伙伴在鱼聪明平台(https://www.yucongming.com)创建了一个 AI 助手,名称为【软件开发人员】。当我搜索 “软件开发” 时,能搜出这个模型:

鱼聪明 AI 助手

结果搜索 “软件开发人员”,也就是助手的全名称时,竟然搜不出结果了?!

鱼聪明 AI 助手

遇到这种事,先从前端出发:第一时间确认前端发送的请求参数是否正确。

按 F12 打开网络控制台,发现搜索关键词传的没毛病:

然后鱼皮顺着网线爬到后端,先要确认一下从数据库中有没有查出最原始的数据,再考虑是不是被业务代码过滤掉了。

在本地开启数据库的查询日志,用的是 MyBatis Plus 框架,开启日志的代码如下:

代码语言:javascript
复制
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

再次执行搜索,打印出的 SQL 记录如图:

把参数拼到 SQL 语句模板中,就是 name like '%软件开发人员%',看上去没有任何问题。

再次验证,接下来我们把拼接好的 SQL 放到数据库控制台进行真实查询:

结果查询结果为 0:

奇怪了,难道数据库中没有这条记录?但是为啥搜索 “软件开发” 的时候,能搜出这个助手呢?

然后我又用助手的 id 去数据库中查询,发现确实有名称为 “软件开发人员” 的数据。

气了气了,为啥查不出来啊?!大家也可以猜一猜。

这个时候我其实已经有想法了,难道是数据库中存储的 name 和我们看到的 name 格式(或者字符)不一致?于是我就从数据库中把 name 的值复制出来,如图:

结果,从数据库中复制出来的 name 作为查询条件,是能查出结果的!

于是就有了下面这张神奇的截图,两个 “一模一样” 的 SQL 语句,一个有结果,一个没结果:

基本就可以确认了,此 “软件开发人员” 非彼 “软件开发人员”,这两个字符串是不一致的!

于是我分别用这两个字符串来生成 MD5 Hash 码,发现 Hash 码不同,说明原字符串不同。

再进行更精确地对比,发现是 “人” 字不同:

坑啊!谁能看出来这两个 “人” 字有区别!

到底有啥区别呢?问下鱼聪明 AI 吧~

结果一秒破案:原来第一个 “人” 是全角字符。所以程序本身没有任何 Bug,这真的是泰裤辣!

大概整个案件就是这样。所以说,我们看到得未必是真实的,这个 Bug 让我想起了很多朋友初上大学时经常把中英文逗号、中英文冒号搞混,这种 Bug 真是让人哭笑不得。希望各位程序员朋友们,尽量不要遇到吧,遇到了的话,想想我这篇文章,说不定就有了解决的思路呢。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员鱼皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档