截断不正确的 DOUABLE 值

执行下面的 SQL 查询时:

UPDATE shop_category
SET name = 'Secolul XVI - XVIII'
AND name_eng = '16th to 18th centuries'
WHERE category_id = 4768

出现以下错误:

1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'

怎么补救?


shop_category表格结构:

category_id   mediumint(8)
name        varchar(250)
name_eng      varchar(250)
366311 次浏览

你不需要 AND关键字,这是 UPDATE 语句的正确语法:

UPDATE
shop_category
SET
name = 'Secolul XVI - XVIII',
name_eng = '16th to 18th centuries'
WHERE
category_id = 4768

尝试用 ,代替 AND

UPDATE shop_category
SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries'
WHERE category_id = 4768

更新语法显示应该使用逗号作为分隔符。

我得到这个异常不是因为 AND 而不是逗号,事实上我得到这个异常只是因为我没有在 where 子句中使用撇号。

就像我的问题一样

update table set coulmn1='something' where column2 in (00012121);

当我把 where 子句改为 where column2 in ('00012121');时,这个查询对我来说很好用。

主要是无效的查询字符串将发出此警告。

错误是由于使用 INSTR函数时出现了一个微妙的语法错误(右括号放错位置) :

INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active'>0);

正确:

INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active')>0;

我只是在这上面浪费了时间,并且想要添加一个这个错误出现的附加情况。

SQL Error (1292): Truncated incorrect DOUBLE value: 'N0003'

测试数据

CREATE TABLE `table1 ` (
`value1` VARCHAR(50) NOT NULL
);
INSERT INTO table1 (value1) VALUES ('N0003');


CREATE TABLE `table2 ` (
`value2` VARCHAR(50) NOT NULL
);


INSERT INTO table2 (value2)
SELECT value1
FROM table1
WHERE 1
ORDER BY value1+0

问题是 ORDER BY value1+0型铸造。

我知道它没有回答这个问题,但这是谷歌上的第一个这个错误的结果,它应该有其他的例子,这个错误出现本身。

如果你在插入时遇到了类似下面这样的问题,问题可能只是在 --和注释文本之间缺少一个空格:

insert into myTable (a, b, c)
values (
123 --something
,345 --something else
,567 --something something else
);

这样做的问题是,--something实际上应该是带有空格的 -- something

基本上就是这样

错误的语法使 MySQL 认为您正在尝试使用类型“ DOUABLE”不正确的列或参数执行某些操作。

从我的错误中吸取教训

在我的例子中,我更新了一个表中的 varchar 列,设置值 0所在的 NULL。我的更新查询是这样的:

UPDATE myTable SET myValue = NULL WHERE myValue = 0;

现在,由于 myValue的实际类型是 VARCHAR(255),这就给出了警告:

+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'value xyz' |
+---------+------+-----------------------------------------------+

现在 myTable实际上是空的,因为 myValue现在是表中每一行的 NULL!怎么会这样?
* 内心呐喊 *

现在有超过30000行的数据丢失。
* 内心的尖叫声越来越强烈 *

谢天谢地有备份,我恢复了所有数据。
* 体内尖叫强度降低 *

更正的查询如下:

UPDATE myTable SET myValue = NULL WHERE myValue = '0';
^^^
Quotation here!

我希望这不仅仅是一个警告,这样忘记那些引言就不会那么危险了。

* 结束内心的尖叫 *

Mysql 似乎使用 SELECT 语句优雅地处理了类型强制转换。 Shop _ id 字段的类型为 varchar,但是 select 语句可以工作

select * from shops where shop_id = 26244317283;

但是当您尝试更新字段时

update stores set store_url = 'https://test-url.com' where shop_id = 26244317283;

它失败并出现错误 Truncated 不正确的 DOUABLE 值: ‘1t5hxq9’

您需要将 shop _ id 26244317283放在引号“26244317283”中,查询才能工作,因为该字段的类型是 varchar 而不是 int

update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';

我在使用 bindParam 和指定 PDO: : PARAM _ INT 时遇到了这个错误,其中我实际上传递了一个字符串。改为 PDO: : PARAM _ STR 修复了错误。

我在尝试执行 WHERE EXIST 时确实遇到了这个错误,其中子查询匹配了意外地属于不同类型的2列。 这两张桌子也是不同的存储引擎。

一列是 CHAR (90) ,另一列是 BIGINT (20)。

一个表是 InnoDB,另一个表是 MEMORY。

疑问部分:

[...] AND EXISTS (select objectid from temp_objectids where temp_objectids.objectid = items_raw.objectid );

将一个列上的列类型从 BIGINT 改为 CHAR 解决了这个问题。

1292-截断不正确的 DOUABLE 值:

当您尝试在此查询中比较不同类型的 SQL (如 `uniqueid` = 1610386969.1713)时,将发生此错误:

UPDATE `cdr` SET `userfield`='survey=5,' WHERE `uniqueid` = 1610386969.1713

更改它以传递此 UPDATE 示例上的错误:

UPDATE `cdr` SET `userfield`='survey=5,' WHERE `uniqueid` = '1610386969.1713'

但在你的问题,如果你改变 AND,的问题将得到解决

UPDATE shop_category SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries' WHERE category_id = 4768

这是因为在使用更新查询时,“还有”处于中间位置

错误 = = > "update user_detail set name = ? and phone_code = ? and phone_num = ? and email = ? where emp_code = ?";

而不是这样使用 逗号(,)

右边 = = > "update user_detail set name = ?, phone_code = ?, phone_number = ?, email = ? where emp_code = ?"

// CALL `ut_liquid_name_maildt`() Edit
// Truncated incorrect DOUBLE value: 'IPPAGUNTA VIJAYALAKSHMI'


// Code Sample


BEGIN


-- Declare loop constructs --
DECLARE done INT DEFAULT FALSE;
DECLARE my_id VARCHAR(50);
DECLARE my_name VARCHAR(50);
DECLARE my_mail_dt date;
DECLARE my_name_gl VARCHAR(50);
DECLARE my_mail_dt_gl VARCHAR(50);
  



-- cursor --
declare cr cursor for select t2.id,t1.name,t1.mail_dt,t2.name as name_gl,t2.mail_dt as mail_dt_gl
from sch_acc_saleint as t1
inner join
sch_acc_salegl  as t2
where t1.sch_batch = t2.sch_batch;


-- Declare Continue Handler --
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;


OPEN cr;


read_loop: LOOP


-- Fetch data from cursor --
FETCH cr
INTO my_id,my_name,my_mail_dt,my_name_gl,my_mail_dt_gl;


-- Exit loop if finished --
IF done THEN
LEAVE read_loop;
END IF;
-- Update Query --
UPDATE sch_acc_salegl SET name = my_name and mail_dt = my_mail_dt  WHERE id = my_id;




END LOOP read_loop;


CLOSE cr;


END


// I was using wrong update query that"s why it is showing error [ Truncated incorrect DOUBLE value ]
// For this type of error check update query
// For example :


UPDATE sch_acc_salegl SET name = my_name,mail_dt = my_mail_dt  WHERE id = my_id;

在我的案例中,使用 Dreamweaver 函数在运行 mysql 查询之前清理数据:

GetSQLValueString($my_string, "text")

我错把它当成:

GetSQLValueString($my_string, "int")

基本上就是把我的字符串转换成一个整数,然后基于此运行 MySQL 查询。当它应该是一个字符串的时候。

所以 使用“ int”而不是“ text”导致了这个问题对我来说。