将值设置为“0”时用大小写更新数据库

3gtaxfhh  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(325)

我在mysql中观察到了一个非常奇怪的行为,非常乐意得到一些建议。
我想将列中的字段从1更新为4,从6更新为9。为此,我用它作为测试

UPDATE `test` SET `id`= case when 'id'= 1 then 4 else 'id' end where id =1

但是,当我在phpmyadmin中运行上述命令时,值将更改为数字0,而不是4。
如果我运行相同的查询而不使用case

UPDATE `test` SET `id`= 4 WHERE `id` =1

很好用。
当我跑的时候

UPDATE `test` SET `id`= 
case when 'id'= 1 then 4 
when 'id'= 6 then 9 

else 'id' end where id in (1,6)

它将1和6替换为“0”

xe55xuns

xe55xuns1#

id 是一个数字值,id通常是 INT 键入mysql。你正在疯狂地混合回击(`````)和( ' ),因此您隐式地强制转换字符串 'id' 一个int,结果是0。

select CAST('foo' as UNSIGNED) ---> 0

因此,您可能需要将查询更改为始终使用反勾号

UPDATE `test` SET `id`= case when `id` = 1 then 4 else `id` end where `id` = 1

相关问题