mysql奇怪的问题——字段多了个空格,查询报错:无该字段

mysql版本:8.0
本地及QA的数据库:navicate可视化工具。
线上:阿里云数据库。

问题:

<?php
messageSQLSTATE[42S22]: Column not found: 1054 Unknown column 'transport_info.delivery_id ' in 'field list' 
?>

错误的sql:

<?php
SELECT
  `A`.`B_id ` 
FROM
  `A`
WHERE
  `A`.`A_id` = '11' 
  AND `A`.`B_id` = '22' 
  LIMIT 1
?>

正确的sql:

<?php
SELECT
  `A`.`B_id` 
FROM
  `A`
WHERE
  `A`.`A_id` = '11' 
  AND `A`.`B_id` = '22' 
  LIMIT 1
?>

现象描述:
上面错误的sql语句,我在navicate中查询时,均能查询出数据,代码块中也能打印出数据。
但在线上,阿里云数据库中查询时,报错,提示该字段不存在!

后来排查发现,是写代码的时候给这个字段后面加了个空格,导致数据查询报错了!

搜了一下,但没有找到原因,也没发现是什么配置影响导致的,只是找到了这个现象。

如果有知道啥配置引起的,希望能指点一下,不知道的,也可以看看,了解一下这个粗心导致的bug。只要因为测试和线上查询结果不一致,导致判断这个问题还是花了一些时间的。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 12
Junwind
` ` 的问题,可以去掉,就没有问题,这个相当于里面的内容是一个字段,空格也算进去了。
10个月前 评论
MuBaiYang (楼主) 10个月前

可以看 navicate 的日志,看最后执行的sql是什么

10个月前 评论
MuBaiYang (楼主) 10个月前
deatil (作者) 10个月前
MuBaiYang (楼主) 10个月前
  1. 我在 Navicat Premium 12.0.24 做了个类似测试,如下(users.id 字段存在,故意多加了个空格):
    SELECT
     `users`.`id `
    FROM
    `users`
    也是会出现类似的报错提示的:
    1054 - Unknown column 'users.id ' in 'field list', Time: 0.000000s
    这可能和你的工具版本有关。
  2. 加了反引号以后,会把整个反引号之间的内容过视为一个完整的字段。以前也遇到过类似的问题,遇到错误以后,对着错误反复排查三遍,基本上就能看出端倪来了。这里容易犯先入为主的错误,忽略空格带来的影响。
10个月前 评论
MuBaiYang (楼主) 10个月前

`` 反斜杠意思是保持原字段,匹配等级比较高

10个月前 评论
MuBaiYang (楼主) 10个月前

这种问题排查起来真的要命

10个月前 评论
MuBaiYang (楼主) 10个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!