执行以下SQL查询时:
UPDATE shop_category
SET name = 'Secolul XVI - XVIII'
AND name_eng = '16th to 18th centuries'
WHERE category_id = 4768
Run Code Online (Sandbox Code Playgroud)
引发以下错误:
1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
shop_category 表结构:
category_id mediumint(8)
name varchar(250)
name_eng varchar(250)
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 194
UPDATE
shop_category
SET
name = 'Secolul XVI - XVIII',
name_eng = '16th to 18th centuries'
WHERE
category_id = 4768
Run Code Online (Sandbox Code Playgroud)
小智 68
我得到这个异常不是因为AND而不是逗号,事实上我只是因为我没有在where子句中使用撇号而得到这个异常.
就像我的查询一样
update table set coulmn1='something' where column2 in (00012121);
Run Code Online (Sandbox Code Playgroud)
当我改变where子句时 where column2 in ('00012121');,查询对我来说很好.
cod*_*ict 12
尝试替换AND使用,
UPDATE shop_category
SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries'
WHERE category_id = 4768
Run Code Online (Sandbox Code Playgroud)
该UPDATE语法显示逗号应作为分隔符.
看来 mysql 使用 SELECT 语句优雅地处理类型转换。shop_id 字段的类型为 varchar,但 select 语句有效
select * from shops where shop_id = 26244317283;
Run Code Online (Sandbox Code Playgroud)
但是当你尝试更新字段时
update stores set store_url = 'https://test-url.com' where shop_id = 26244317283;
Run Code Online (Sandbox Code Playgroud)
它失败并出现错误截断不正确的双值:'1t5hxq9'
您需要将 shop_id 26244317283 放在引号“26244317283”中才能使查询正常工作,因为该字段的类型为 varchar 而不是 int
update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';
Run Code Online (Sandbox Code Playgroud)
主要是无效的查询字符串会发出此警告。
使用INSTR函数时由于细微的语法错误(右括号错位)而错误:
INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active'>0);
Run Code Online (Sandbox Code Playgroud)
正确的:
INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active')>0;
Run Code Online (Sandbox Code Playgroud)
这是错误的语法,导致MySQL认为您正在尝试使用类型不正确的“ DOUBLE”的列或参数进行操作。
就我而言,我NULL在值所在的表设置中更新了varchar列0。我的更新查询是这样的:
UPDATE myTable SET myValue = NULL WHERE myValue = 0;
Run Code Online (Sandbox Code Playgroud)
现在,由于实际的类型myValue是VARCHAR(255)这个给人的警告:
+---------+------+-----------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'value xyz' |
+---------+------+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
现在myTable几乎是空的,因为myValue现在NULL表中的每个行都是空的!这怎么发生的?
*内部尖叫*
现在,超过3万行的数据缺失。
*内部尖叫声加剧*
谢天谢地的备份。我能够恢复所有数据。
*内部尖叫强度降低*
更正后的查询如下:
UPDATE myTable SET myValue = NULL WHERE myValue = '0';
^^^
Quotation here!
Run Code Online (Sandbox Code Playgroud)
我希望这不仅仅是警告,所以忘记这些引文的危险性较小。
*结束内部尖叫*
我只是在此上浪费时间,想添加一个额外的案例来说明此错误。
SQL Error (1292): Truncated incorrect DOUBLE value: 'N0003'
Run Code Online (Sandbox Code Playgroud)
测试数据
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
Run Code Online (Sandbox Code Playgroud)
问题是ORDER BY value1+0-类型转换。
我知道它不能回答问题,但这是Google在此错误上的第一个结果,应该有其他示例可以说明此错误。
小智 5
这是因为使用更新查询时中间有“and”
错误==>"update user_detail set name = ? and phone_code = ? and phone_num = ? and email = ? where emp_code = ?";
而不是使用COMMA(,)
右==>"update user_detail set name = ?, phone_code = ?, phone_number = ?, email = ? where emp_code = ?"