ERROR 1292 (22007): Truncated incorrect DOUBLE value 和ORA-01722: invalid number
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,其实这种错误和隐式转换有关主要是由于转换的时候不能转换为期望的格式的然后出的问题比如 1p这个字符要转换为 int(number)是不可能的MYSQL 错误模拟如下:myql> show variab
千家信息网最后更新 2025年11月13日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同样的报错
主要是由于转换的时候不能转换为期望的格式的然后出的问题
比如 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同样的报错
时候
错误
问题
信息
如上
字符
常会
情况
格式
列子
中通
有关
期望
演示
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
提供网络安全环境
数据库的组成部分
信息网络安全分析评估的方法
中鑫超频服务器电源
服务器硬盘10000转
贵州高配置服务器
网络安全培训 开班讲稿
苏州橡胶零件加工管理软件开发
网络安全布丁
互联网科技助推汽车金融
苹果手机远程连接登录服务器
红帽杯网络安全攻防
做财务审计需要做数据库吗
上网如何注意网络安全
陕西万汇网络技术怎么样
ipcsun串口服务器
互联网公司的科技股
网络安全手抄报大全大一
伴伴上海网络技术有限公司怎样
世嘉的服务器一般在哪
思杰网络技术怎么样
南宁龙猫网络技术有限公司
皇室战争外国服务器
武钢网络安全理念
数据库概括第4版 电子版
两台收银机怎么共享数据库
股票兼职软件开发
网络安全加固设备价格
关于网络安全法的说法
确保网络安全宣传