执行以下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)
答案 0 :(得分:179)
您不需要AND
关键字。这是correct syntax of the UPDATE statement:
UPDATE
shop_category
SET
name = 'Secolul XVI - XVIII',
name_eng = '16th to 18th centuries'
WHERE
category_id = 4768
答案 1 :(得分:64)
我得到这个异常不是因为AND而不是逗号,事实上我只是因为我没有在where子句中使用撇号而有这个异常。
像我的查询一样
update table set coulmn1='something' where column2 in (00012121);
当我将where子句更改为where column2 in ('00012121');
时,查询对我来说运行正常。
答案 2 :(得分:11)
尝试用AND
,
UPDATE shop_category
SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries'
WHERE category_id = 4768
UPDATE Syntax显示逗号应该用作分隔符。
答案 3 :(得分:4)
主要是无效的查询字符串会发出此警告。
使用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;
答案 4 :(得分:4)
我只是浪费了我的时间,并希望添加一个此错误出现的其他案例。
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
- 类型转换。
我知道它没有回答这个问题,但这是谷歌针对此错误的第一个结果,它应该有其他示例,其中出现此错误。
答案 5 :(得分:2)
语法错误,导致MySQL认为您正在尝试对类型为“ DOUBLE”的列或参数进行操作。
就我而言,我更新了表设置NULL
中的varchar列,其中的值0
所在。我的更新查询是这样的:
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
!这是怎么发生的?
*内部尖叫*
现在超过3万行的数据丢失。
*内部尖叫声加剧*
感谢备份。我能够恢复所有数据。
*内部尖叫强度降低*
更正后的查询如下:
UPDATE myTable SET myValue = NULL WHERE myValue = '0';
^^^
Quotation here!
我希望这不仅仅是警告,所以忘记这些引文的危险性较小。
*结束内部尖叫*
答案 6 :(得分:1)
当您尝试在此查询中比较 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
答案 7 :(得分:0)
如果你的插件看起来像下面这个问题,那么问题可能只是--
与评论文字之间缺少空格:
insert into myTable (a, b, c)
values (
123 --something
,345 --something else
,567 --something something else
);
问题在于--something
实际上应该-- something
有空格。
答案 8 :(得分:0)
似乎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;
它失败并出现错误截断了错误的DOUBLE值:'1t5hxq9'
您需要将shop_id 26244317283放在引号'26244317283'中,以使查询正常工作,因为该字段的类型为varchar not int
update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';
答案 9 :(得分:0)
在使用bindParam并在我实际传递字符串的地方指定PDO :: PARAM_INT时,遇到了此错误。更改为PDO :: PARAM_STR可以修复错误。
答案 10 :(得分:0)
当我尝试执行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解决了该问题。
答案 11 :(得分:0)
这是因为使用更新查询时“和”介于两者之间
错误 ==> $match
而不是使用COMMA(,)
正确 ==> db.users.aggregate([
{
$match: {
$expr: {
$and: [
{
$gte: [
"$registerDate",
{ $toDate: "2021-02-28T21:00:00Z" }
]
},
{
$lt: [
"$registerDate",
{ $toDate: "2021-10-31T21:00:00Z" }
]
}
]
}
}
}
])