更新表上的警告1292

时间:2013-02-14 15:25:22

标签: mysql

我正在尝试使用以下查询更新表:

UPDATE test.t1
SET obrigatorios = (SELECT quantidade FROM test.tcur WHERE tipo = 3)
WHERE perfil IN (7, 11);

或此查询应该做同样的事情:

UPDATE test.t1 a, test.tcur b
SET a.obrigatorios = b.quantidade
WHERE a.perfil IN (7, 11)
AND b.tipo = 3;

表tcur有这样的结构:

CREATE TABLE `tcur` (\
`quantidade` int(11) default NULL,\
`tipo` int(11) default NULL,\
`descritivo` varchar(12) default NULL\
) ENGINE=MyISAM DEFAULT CHARSET=latin1

表t1是这样的:

CREATE TABLE `t1` (\
`qtd` bigint(20) NOT NULL default '0',\
`qtd_vt_disp` int(11) NOT NULL default '0',\
`perfil` binary(11) default NULL,\
`obrigatorios` int(11) NOT NULL default '0'\
) ENGINE=MyISAM DEFAULT CHARSET=latin1

关于截断的双打,我收到了数以万计的错误/警告1292。问题出在哪儿? “截断不正确的DOUBLE值”

2 个答案:

答案 0 :(得分:0)

当引擎必须转换数据类型并且发生一些精度损失时会发生此错误,因为它们的大小不同。

在这种特殊情况下,字段perfil的数据类型是二进制的,应该是int。

如果您遇到相同类型的警告“截断不正确的DOUBLE值”,请查找不匹配的数据类型。

答案 1 :(得分:0)

为了它的价值,当我遇到类似的问题时,我发现数据类型不是问题,它实际上是MySQL UPDATE语句的构造。尝试通过MySQL工作台手动进行更改,如果您可以手动更新,那么请检查工作台如何构建必要的语句。