求解一个 select 和 update 下 字段值 = 0 出现的错误

2020-06-23 14:34:48 +08:00
 acz154

字段 xx 是 varchar 类型 我首先使用了 SELECT 查询 , 查出了 400 多条数据

SELECT * FROM aaa WHERE xx = 0

确定数据后 UPDATE 更新

UPDATE aaa SET kk = null WHERE xx = 0

发现全部数据的 kk 都变成了 null,查了下 (varchar) = 0 会出问题

但为什么 select 查出来的数据会 和 update 的数据不一样呢?

1575 次点击
所在节点    MySQL
6 条回复
kiracyan
2020-06-23 16:07:15 +08:00
你看看能不能重现这个情况
chainzhao
2020-06-23 17:14:01 +08:00
varchar 类型建议还是加上引号吧,虽然它能够自动转换,但是会有一些已知的问题出现,例如,不加引号就不会走索引,查询速度差的不是一点点
fhsan
2020-06-23 17:19:48 +08:00
0 null 空字符串 类型转换 都是巨坑
takemeaway
2020-06-23 17:20:56 +08:00
(varchar) = 0 不就是代表全部吗? 怎么不一样了? select 也是全部。
acz154
2020-06-24 09:00:34 +08:00
@takemeaway @fhsan @chainzhao @kiracyan
其实 where 还有第二个条件 限定了 400 多条,但 update 的时候不知道为什么忽略了第二个条件,我执行了几次都是这种情况,不知道是不是什么原因导致的 ,用的是 5.7.29
zhangysh1995
2020-06-24 17:03:07 +08:00
试一下 UPDATE aaa SET kk = null WHERE xx != 0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX