这是 MySQL (5.1.41-community) 中的错误吗?
CREATE TEMPORARY TABLE zztest (stuff varchar(20) NULL)
INSERT INTO zztest
SELECT
'test'
FROM (
select '1' as testcol
union
select null
) a
WHERE **IF(a.testcol IS NULL,'',a.testcol)** IS NOT NULL
这是一个简化的查询。** 之间的 IF 表达式应该是粗体的。它来自动态查询,其中 IF 表达式被无辜地放入查询中。
选择本身就有效。当与插入语句结合使用时,它不起作用。内部选择旨在显示创建的临时表在被检查的列中可以有空值。
通过用 IFNULL(a.testtool, '') 替换 IF 来“修复”该问题
其他一些替换也失败了(而选择本身起作用):
1 IF (a.testcol, '', a.testcol)
2 IF (a.testcol, '', '')
3 IF ('', '', '')
这个错误是否存在于其他版本的 MySQL 中?
编辑——选择查询的结果:
消息:错误代码:1292。截断不正确的整数值:''
它应该有的结果是将两个“测试”字符串输入到 zztest 表中。
编辑——大约 2 小时后我又试了一次。最后两个语句“有效”(记住将它们插入上面的查询中......)。第一个替换语句失败。然后数字 2 和 3 再次失败。
所以看起来语句 1 是罪魁祸首(原来的,它现在出错了..).. 并且可能存在某种不良状态,其中产生相同中间结果的语句也失败了。
那么接下来的问题是——有没有办法确保查询被重置?
就在我尝试在新连接中执行查询之后,工作台崩溃了..相关吗?
编辑——发现显式演员表有效:
IF (a.testcol, cast('' as char), cast('' as char))
所以我找到了解决方法。问题是——为什么''(引号内有任何内容)会被解释为整数?我什至通过连接''将它解释为DOUBLE。
为什么它有时会起作用,而其他时候却不起作用?<--这部分最烂。