ERROR 1292(22007)
ERROR 1292(22007)
Table of Contents
1 1292
1.1 22007
-
错误信息
ERROR 1292 (22007): Truncated incorrect DOUBLE value: ''
-
分析
该错误是由于 MySQL 对字符值是否符合字段要求进行了严格的检查,但是有时候,这个 检查的结果却是错误的。就像下面示例:
MariaDB [(none)]> update test.test set status=NULL where status=6; ERROR 1292 (22007): Truncated incorrect DOUBLE value: '' MariaDB [(none)]> desc test.test; +---------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | status | varchar(30) | YES | | NULL | | +---------------------+--------------+------+-----+---------+----------------+ 2 rows in set (0.02 sec)
从上面的查询结果来看,status 字段允许为空, 默认为空。我将该字段值更新为空字段并 没有违反该字段的约束条件。但是,错误就是么离奇的发生了。明明没有问题,却提示为错误 数据。
-
查看SQL_MODE
MariaDB [(none)]> show variables like 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------+
-
解决
主要是把sql_mode中的strict_trans_tables去掉即可。
set [global | session] variables sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Created: 2019-07-16 Tue 13:58
===================
天行健,君子以自强不息
地势坤,君子以厚德载物
===================