使用cast-in-update语句时出现mysql错误1292

使用cast-in-update语句时出现mysql错误1292,mysql,truncated,Mysql,Truncated,下面的语句返回“错误代码:1292.截断的整数值不正确:'95.00'1.132秒” 但是如果我使用下面的语句,我可以成功地得到结果95 select cast(emp as unsigned) from new2006 where IsNum(emp)=0; PS:emp的数据类型是varchar(7)。您处于严格的环境中;如文件所述(重点补充): 严格模式控制MySQL如何处理数据更改语句(如或)中的无效或缺失值。值可能因多种原因而无效。例如,该列的数据类型可能错误,或者可能超出范围。如果

下面的语句返回“错误代码:1292.截断的整数值不正确:'95.00'1.132秒”

但是如果我使用下面的语句,我可以成功地得到结果95

select cast(emp as unsigned) from new2006 where IsNum(emp)=0;

PS:emp的数据类型是varchar(7)。

您处于严格的环境中;如文件所述(重点补充):

严格模式控制MySQL如何处理数据更改语句(如或)中的无效或缺失值。值可能因多种原因而无效。例如,该列的数据类型可能错误,或者可能超出范围。如果要插入的新行不包含定义中没有显式
DEFAULT
子句的非
NULL
列的值,则缺少值。(对于
NULL
列,如果缺少值,则插入
NULL
。)

对于不更改数据的语句,例如,无效值在严格模式下生成警告,而不是错误。


如果希望
更新成功而不出错,则需要更改为非严格的SQL模式,或者首先将字符串转换为不会引发错误的值,例如
子字符串索引(emp',,1)

易于复制,例如:

CREATE TABLE new2006 (
 emp VARCHAR(7)
);
INSERT INTO new2006 (emp) VALUES ('95.00');
UPDATE new2006 SET emp=CAST(emp AS UNSIGNED);
我怀疑问题与从/到基2的内部转换有关,因为转换为十进制时没有错误消息:

UPDATE new2006 SET emp=CAST(emp AS DECIMAL);
。。。或者从源数据中删除小数时:

INSERT INTO new2006 (emp) VALUES ('95');
我在书里找不到任何能说明这个问题的东西。我猜MySQL会根据输入场景选择不同的算法或内部变量类型,有时在执行内部计算时会发生截断。

试试这个

update IGNORE new2006 set new2006.emp=cast(emp as unsigned) where IsNum(emp)=0;

请显示表格结构emp的数据类型为varchar(7)
update IGNORE new2006 set new2006.emp=cast(emp as unsigned) where IsNum(emp)=0;