我在mysql中观察到一个非常奇怪的行为,很乐意提供一些建议。
我想将一列中的字段更新为1至4和6至9。为此,我将其用作测试
UPDATE `test` SET `id`= case when 'id'= 1 then 4 else 'id' end where id =1
但是,当我在phpmyadmin中运行以上命令时,值更改为数字0而不是4。
如果我在没有大小写的情况下运行相同的查询
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”
答案 0 :(得分:1)
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