侧边栏壁纸
博主头像
知兮寒兮博主等级

无人问津也好,意难平也罢,你都要试着安静下来,去做自己该做的事情,而不是让内心烦躁、焦虑,毁掉你本就不多的热情和定力。

  • 累计撰写 33 篇文章
  • 累计创建 3 个标签
  • 累计收到 13 条评论

目 录CONTENT

文章目录

select * from table where cloum = '8'查询不到数据

知兮寒兮
2022-11-09 / 1 评论 / 0 点赞 / 903 阅读 / 2021 字 / 正在检测是否收录...

问题背景

为了方便测试,偷了步懒,直接把1-50直接excel拖拽生成,然后cv到mysql数据库

image

神奇的事情来了

问题

通过select 查询不到数据

image

其实实际上是有数据的

image

但是select * from table where column = 8又是可以查到数据的

image

解决思路

瞬间就想到了mysql的隐式转换,但是回过来想了下,又感觉不对,隐式转换也不是这样的啊

https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html?spm=5176.100239.blogcont47339.5.1FTben

image

翻译:

1. 隐式类型转换规则 



如果一个或两个参数均为NULL,则比较的结果为NULL,除了  相等比较运算符。对于NULL NULL,结果为true。 

如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。 

如果两个参数都是整数,则将它们作为整数进行比较。 

如果不与数字比较,则将十六进制值视为二进制字符串。 

如果参数之一是  timestamp 或 datatime column,而另一个参数是常量,则在执行比较之前,该常量将转换为时间戳。 

如果参数之一是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较;如果另一个参数是浮点值,则将参数作为浮点值进行比较。 

在所有其他情况下,将参数作为浮点数(实数)进行比较。例如,将字符串和数字操作数进行比较,将其作为浮点数的比较。 

通过隐式类型转换可以得出上述示例的结果:当查询中有数字时那么会将字符串转化成数字进行比较。所以当你的列为字符串时那么需要将列中字符串进行类型格式转换而进行字符格式转换之后则与索引不一致;当你的列为数字时查询等式为字符串时只是把查询的常量转成数字并不影响列的类型所以依然可以使用索引并没有破坏索引的类型。 

苦思无果,试了下,在这个列的随便一个数据中试了下ctrl + a全选,发现这个值是不是有点长啊

image

然后复制成insert语句,发现。。。。。有空格,所以又回到了最开始的时候,excel这里生产数据的时候,这个数据是不对的

image

解决办法

解决办法,把后面的空格去掉即可

0

评论区