ERROR 1292 (22007): Truncated incorrect DOUBLE value 和ORA-01722: invalid number

其实这种错误和隐式转换有关
主要是由于转换的时候不能转换为期望的格式的然后出的问题
比如 1p这个字符要转换为 int(number)是不可能的

MYSQL 错误模拟如下:

myql> show variables like 'sql_mode%';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.01 sec)

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table jjjkk (id varchar(20),name varchar(20));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into jjjkk values('1','gaopeng');
Query OK, 1 row affected (0.00 sec)

mysql> update jjjkk set name='gaop' where id=1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update jjjkk set name='gaop' where id=1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> insert into jjjkk values('1p','gaopeng');
Query OK, 1 row affected (0.01 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> update jjjkk set name='gaop' where id=1;
ERROR 1292 (22007): Truncated incorrect DOUBLE value: '1p'

MYSQL 中存在隐式转换ORACLE中通常会在执行计划中给出to_char之类的标示
但是MYSQL执行计划没有
如上列子虽然'1'可以转换这个时候没有报错。但是新插入的'1p'是不能转换的
这个在ORACLE中也存在这样的问题。所以报错
ERROR 1292 (22007): Truncated incorrect DOUBLE value: '1p'
当然我是严格的SQL_MODE,否则则是WARINGS
可以如下试试转换:
 SELECT CONVERT('1',SIGNED);
 SELECT CONVERT('1p',SIGNED);

然后演示一下ORACLE的报错:
SQL> create table testmmm( id varchar2(20),name varchar2(20));
Table created

SQL> insert into testmmm values('1','gaopeng');
1 row inserted

SQL> commit;
Commit complete

SQL> select * from testmmm where id=1;
ID                   NAME
-------------------- --------------------
1                    gaopeng

SQL> insert into testmmm values('1p','gaopeng');
1 row inserted

SQL> commit;
Commit complete

SQL> select * from testmmm where id=1;
select * from testmmm where id=1
ORA-01722: invalid number

如果模拟
SQL> select to_number('1p') from dual;
select to_number('1p') from dual
ORA-01722: invalid number

同样的情况

我们查看一下执行计划中的隐式转换信息:
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(TO_NUMBER("ID")=1)
   
仅此记录MYSQL和ORACLE同样的报错

时间: 2024-09-20 17:48:22

ERROR 1292 (22007): Truncated incorrect DOUBLE value 和ORA-01722: invalid number的相关文章

mysql更新数据提醒Truncated incorrect INTEGER value: 错误

在网上都找不到什么解决的方法.但是百度到一个个人博客后找到了解决的方法 报错的sql语句 update xx user set qq_password = 'xx_id' & photo = 'img' WHERE email = 'emailx' 然后这个是正确的执行语句 update xx user set qq_password = 'xx_id',photo = 'img' WHERE email = 'emailx' 把&改为,逗号就好了 后来看一老外使用存储过得也碰到这样的问题

Why do we get error when we run “opmnctl status” from “$INST_TOP/ ora/ 10.1.3/ opmn/ bin”

原文:http://onlineappsdba.com/index.php/2010/01/04/oracle-apps-r12-interviewreaders-question-opmnctl-status/ This post covers interview question (related to Oracle Apps R12) from one reader, If you have any question then email us or post it under comme

"ORA-12012: error on auto execute of job ORACLE_OCM.MGMT_CONFIG_JOB_2_1" And "ORA-29280: invalid dir

 "ORA-12012: error on auto execute of job ORACLE_OCM.MGMT_CONFIG_JOB_2_1" And "ORA-29280: invalid directory path" In Database AlertLog (Doc ID 1453959.1) To Bottom   Modified:02-Apr-2013 Type:PROBLEM         In this Document   Sympto

Incorrect datetime value

今天在开发库上给一个表添加字段时候,发现居然报错: root@DB 06:14:42>ALTER TABLE `DB`.` user` ADD COLUMN `status_mode` TINYINT UNSIGNED AFTER ` test_id`; ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'GMT_CLEANUP' at row 2; 查找error的信息: $perror

ORACLE导出文本到MYSQL 报错 Incorrect integer value: ''

今天从ORACLE导出数据文本格式的到MYSQL 5.6 发现 load data infile Incorrect date value '' 这种报错,从5.6开始在严格模式下插入数据如果是数字和日期 mysql> insert into testnull1 values('','test',''); ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1 mysql> insert into tes

mysql支持的数据类型及其测试

原文:mysql支持的数据类型及其测试 1.基础知识 1.1如何来查看mysql的帮助手册 ?int Help float; 1.2创建表的规则 CREATE TABLE [IF NOT EXISTS] tbl_name( 字段名 字段类型 [完整性的约束条件]); 1.3如何向表中插入数据 INSERT [INTO] tab_name [(字段名称--)] VALUES (值--) 1.4Mysql数据类型 1.数值型 整数类型 TINYINT:范围0~255;-128~127占用1字节 SM

Oracle和MySQL竟然可以这么写这样的SQL?(r12笔记第99天)

今天看到Franck Pachot?发了一个Twitter,意思是Oracle里的SQL还能这么写.猛一看确实让人有些意外. 禁不住诱惑,自己也尝试了一番.我现在12cR2的环境中测试了一下. Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 尝试上面的步骤,先来看看dual表. SQL> select count(*)from dual;   COUNT(*) ----------     

小心MySQL的隐式类型转换陷阱

1. 隐式类型转换实例 今天生产库上突然出现MySQL线程数告警,IOPS很高,实例会话里面出现许多类似下面的sql:(修改了相关字段和值) SELECT f_col3_id,f_qq1_id FROM d_dbname.t_tb1 WHERE f_col1_id=1226391 and f_col2_id=1244378 and f_qq1_id in (12345,23456,34567,45678,56789,67890,78901,89012,90123,901231,901232,90

MySQL隐式转化整理

前几天在微博上看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下.希望对大家有所帮助. 当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion).比如下面的例子: mysql> SELECT 1+'1'; -> 2 mysql> SELECT CONCAT(2,' test'); -&