请教高手,这是为什么

zhanzehua 2002-09-26 11:48:01
1 select * from table
where id = '1.00011880000000000e+007'

2 select * from table
where id = 1.00011880000000000e+007

3 select * from table
where id = 10001188

4 select * from table
where id = '10001188'

id 是 int
1 不能检索出数据
2,3,4 则可检索出数据

注 select 10001188 = '1.00011880000000000e+007'
-> 1


只想知道为什么?


...全文
15 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuixin13 2002-11-10
  • 打赏
  • 举报
回复
呵呵,正如 bombshell(水中鱼)所说,
我用MySQL4.0.4重新试了一下,

1 select * from table
where id = '1.00011880000000000e+007'

2 select * from table
where id = 1.00011880000000000e+007

3 select * from table
where id = 10001188

4 select * from table
where id = '10001188'

这四个 SQL 都可以得到正确的结果了,
可以MySQL在3.23版上有此BUG吧
bombshell 2002-11-10
  • 打赏
  • 举报
回复
这是自动转换,mysql在安全性考虑这方面做得还可以,但在mysql4.0以前的版本就不行了。
shuixin13 2002-09-26
  • 打赏
  • 举报
回复
select * from table
where id = '1.00011880000000000e+007'

ID应该是被转换成了字符型,
如果你用这个一定行的

select * from table
where id = '1.00011880000000000e+007'+0
zhanzehua 2002-09-26
  • 打赏
  • 举报
回复
to shuixin13 可以是可以了,但是用不到索引

to _Shakespeare 若为字符串如何解释

select 10001188 = '1.00011880000000000e+007'
-> 1

谁能说一说内部转换机制


_Shakespeare 2002-09-26
  • 打赏
  • 举报
回复
呵呵
'1.00011880000000000e+007' 被看做'1.00011880000000000e+007'--字符穿

而1.00011880000000000e+007 被看做1.00011880000000000e+007---数据

浅妄薄见,望与斟酌


shuixin13 2002-09-26
  • 打赏
  • 举报
回复
select *,(c1='1.00011880000000000e+7')as q from cj where binary ( c1= '1.00011880000000000e+7')

就可以了
anziqi 2002-09-26
  • 打赏
  • 举报
回复
他可能一般是自动的转换的.如果你用''括起来的话他就把他当成字符型.
如果你+0那就他就认为他是数据型的.
他的类型可以定义的.
zhanzehua 2002-09-26
  • 打赏
  • 举报
回复
能告诉原因吗

按mysql手册
在int与字符串比较的时候,应该都转换成浮点型进行转换
为什么会这样

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧