[数据库/MySQL]解决异常:Data truncation: Truncated incorrect DOUBLE value: 'dc5'
1 场景复现
- MySQL: 5.7.24-27
- 表结构
(两张独立的表)
[表 RRR1]
CREATE TABLE `RRR1` (
`R1` float NOT NULL COMMENT 'R1',
`R2` float NOT NULL COMMENT 'R2'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='RRR1';
[表 Person11]
CREATE TABLE `Person11` (
`CSSJY111` varchar(3) DEFAULT NULL COMMENT '测试数据元011',
`CSSJY107` int(3) DEFAULT NULL COMMENT '测试数据元007',
`CSSJY106` int(3) DEFAULT NULL COMMENT '测试数据元006',
`CSSJY112` datetime DEFAULT NULL COMMENT '测试数据元012',
`CSSJY103` varchar(10) DEFAULT NULL COMMENT '测试数据元003',
`CSSJY113` blob COMMENT '测试数据元013',
`CSSJY104` varchar(10) DEFAULT NULL COMMENT '测试数据元004',
`CSSJY108` varchar(10) DEFAULT NULL COMMENT '测试数据元008',
`CSSJY102` varchar(10) DEFAULT NULL COMMENT '测试数据元002',
`CSSJY109` varchar(10) DEFAULT NULL COMMENT '测试数据元009',
`CSSJY101` varchar(10) DEFAULT NULL COMMENT '测试数据元101',
`CSSJY110` date DEFAULT NULL COMMENT '测试数据元010',
`CSSJY105` int(3) DEFAULT NULL COMMENT '测试数据元005'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='个人信息';
- 异常SQL
DELETE FROM
CJ_TEST.`RRR1`
WHERE `R1` IN (
SELECT * FROM (
SELECT `R1` FROM CJ_TEST.`RRR1` WHERE `R1` IN (
SELECT `CSSJY111` FROM (
SELECT `CSSJY111` FROM `CJ_TEST`.`Person11` ORDER BY `CSSJY112` ASC, `CSSJY111` LIMIT 3
) ttt -- 中间表 ttt
)
) B WHERE B.R1 = 1 -- 中间表 B
)
报异常:
[Err] 1292 - Truncated incorrect DOUBLE value: 'dc5'
翻译: [错误] 1292 - 数据截断:截断不正确的双精度值:'dc5'
注: MySQL数据库 必须带中间表 ttt 和 B,否则 查询会失败
MySQL数据库中 带中间表 可避免异常:[Err] 1093 - You can't specify target table 'tableName' for update in FROM clause
FROM clause : FROM 子句
(翻译: 你不能在DELETE/UPDATE这类修改操作的FROM子句中指定目标表——tableName。)
"不能先select出同一表中的某些值,再update这个表(在同一语句中)"
"不能在同一表中查询的数据作为同一表的更新数据"
"注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。" (博主尚未验证此结论)
原因: DELETE/UPDATE (修改)操作 表tableName时,其FROM子句的实际操作表是 FROM子句内的虚表(结果集)
解决办法:
1. 在select外边套一层括号"( 原SQL )",让数据库认为你不是查同一表的数据作为同一表的更新数据
2. 将select的结果集临时设置为中间表——`select * from ( 原select的结果集 ) TMP`,让修改操作的FROM对象为中间表
详见:MySQL之You can't specify target table for update in FROM clause解决办法 - CSDN
2 原因分析
源字段与目标字段的类型不一致!!!
异常SQL中:
源字段为 Person11表的CSSJY111字段(varchar(3))
目标字段为 RRR1表的R1字段(float)
3 解决方案
情况1: 源字段值A与目标字段值B的类型不一致
- 解决方案1
修改数据库表的字段类型。
ALTER TABLE RRR1 MODIFY COLUMN R1 VARCHAR(3);
- 解决方案2
sql_mode
(此方案不太推荐,但迫不得已时亦可使用)
SET SESSION sql_mode = '';
补充/延申: sql_mode的其它操作
select @@GLOBAL.sql_mode;
select @@SESSION.sql_mode; -- STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
情况2: UPDATE的语法错误
网络博客中很多人更多遇到的是此类情况————语法错误
例如:update table set A = "a" and B = "b" where id = 1
(报错)
- 解决方案
原SQL语句的 "and" 换成逗号 ","
update table set A = "a" , B= "b" where id = 1 (正确)
Y 不足之处与反思
1 追根到底,本质上是什么原因导致的此异常? [√]
—— 此问题已解决 于 2020-10-14 21:14
2 sql_mode的配置起到了什么作用? [待解决]
3 为什么这么做可以成功解决? [√]
—— 此问题已基本解决 于 2020-10-14 21:14
X 参考与推荐文献
- Data truncation: Truncated incorrect DOUBLE value [推荐] - CSDN
- mysql异常:Data truncation: Truncated incorrect DOUBLE value: '2020-03' - 91mszl.com
- MySQL之You can't specify target table for update in FROM clause解决办法 - CSDN
- mysql的sql_mode设置 - 博客园
- 当使用update语句时出现Data truncation: Truncated incorrect DOUBLE value:??错误. - CSDN
[数据库/MySQL]解决异常:Data truncation: Truncated incorrect DOUBLE value: 'dc5'的更多相关文章
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'L
1.错误叙述性说明 [ERROR:]2015-06-08 09:49:42,523 [异常拦截] org.hibernate.exception.DataException: error execut ...
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'L
1.错误描述 [ERROR:]2015-06-08 09:49:42,523 [异常拦截] org.hibernate.exception.DataException: error executing ...
- com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value:...
在使用mybatis的@Update注解的时候,报了一个这样的错 ### Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncat ...
- 异常-Data truncation: Truncated incorrect DOUBLE value: '-9370.3530-'
1详细异常日志 9/11/04 17:36:09 ERROR base.SQLHelper: Data truncation: Truncated incorrect DOUBLE value: '- ...
- Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'as3'
执行更新时的出错信息 Whitelabel Error Page This application has no explicit mapping for /error, so you are see ...
- Data truncation: Truncated incorrect DOUBLE value 解决方案
1.情况限制 此处的错误解决方案只讨论: 在使用Mybatis时,传入数组且使用<foreach>标签时出现此种报错: 2.报错案例 mapper.java /** * @Descript ...
- java.sql.SQLException: Data truncation: Truncated incorrect DOUBLE value
mysql 报这个异常:java.sql.SQLException: Data truncation: Truncated incorrect DOUBLE value update 表名 set c ...
- Data truncation: Truncated incorrect DOUBLE value:
在写sql查询语句queryRunner.update(connection,"update account set balance=? where name=?",account ...
- Data truncation: Truncated incorrect DOUBLE value错误的解决方案
Data truncation: Truncated incorrect DOUBLE value错误的解决方案: 当在修改某条单位记录时,发生了Data truncation: Truncated ...
- mysql 插入中文报错: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value...
总结写在前面, 总结: 当Java通过jdbc链接mysql插入中文时,要保证程序可以正常执行,而且插入的中文不会乱码, mysql服务器端,对数据表(不是数据库)的编码设置,要保证是支持中文的,例如 ...
随机推荐
- 上分准备 VP Codeforces Round #762 (Div. 3) 4题ABCE
+00:02 +00:16 +01:08 +02:07 VP 情况 4/8 ABCE ,赛时排名可以到823,什么时候我可以上个青 B 本想写个map的二分的,发现自己不会,写了个普普通通的二分 ...
- Vuex----Mutations
注意: 只能通过 mutations里的函数才能修改 state 中的数据 第一种方法: const store = new Vuex.Store({ state:{ count:0 }, mutat ...
- IDEA的安装与使用
IDEA官网 进入该链接下载社区版就行 下载过后安装 安装之后写第一个代码 直接右键src-new-Java class 写入psvm 再写sout 再写输出的话就可以完成 非常方便
- Spring 笔记二 IOC
1.IOC IOC:Inversion od controller ,控制反转,控制的是资源的获取方式,由原来的自己创建 new 变成 Spring 容器创建. DI:Dependency In ...
- mac 安装go语言以及配置环境变量
Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 其他版本自己根据系统版本下载,这里只介绍mac下载 一 ...
- 狂神的学习笔记demo11(包机制)
无法生成子包的问题:设置图标里的Compact Middle Packages勾去掉 //定义包 package package com.panda.base1; //导入包import import ...
- 【原创】SeetaFace2 Android编译
SeetaFace2 github上有很完整的编译说明,但是自己编译过程中还是遇到了一点小问题.记录一下 编译环境: wsl ubuntu 20.04 执行编译命令 cmake .. -DCMAKE_ ...
- ajax的async异步执行属性
遇到了一个ajax,看到了一个属性,async,是用来设置同步执行,或者是异步执行的 举一个例子: $.ajax({ async: false, type : "post", ...
- 007使用IDEA开发
007使用IDEA开发 1.什么叫IDE? 集成开发环境(IDE,Integrated Development Environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调 ...
- P2671 [NOIP2015 普及组] 求和
[NOIP2015 普及组] 求和 题目背景 NOIP2015 普及组 T3 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\).每个格子上都染了一种颜色\(co ...