Mysql 将值设置为';时使用大小写更新数据库;0';

Mysql 将值设置为';时使用大小写更新数据库;0';,mysql,phpmyadmin,Mysql,Phpmyadmin,我在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 它很好用 当我

我在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”

id
是一个数值,因为在mysql中id通常是
INT
类型。您大量地混合了反勾号(```)和(
'
),因此将字符串
'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

谢谢你,班巴姆。它现在起作用了,我真的没有意识到这一点,不客气。始终对列和表名@user3358102使用反勾号(或完全不使用)