1. 程式人生 > >MySQL 5.7 報錯:ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'CR40020180611004'

MySQL 5.7 報錯:ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'CR40020180611004'

在生產環境update一個語句報錯:
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'CR40020180611004'

經過網路查詢是資料型別不一致導致的。
--查看錶的型別:
mysql> desc sc_stockorder_2.outstockorder;
+-------------------+---------------+------+-----+-------------------+-----------------------------+
| Field             | Type          | Null | Key | Default           | Extra                       |
+-------------------+---------------+------+-----+-------------------+-----------------------------+
| id                | bigint(20)    | NO   | PRI | NULL              |                             |
| RefOrderNo        | varchar(50)   | NO   | MUL | NULL              |                             |
| Org_Id            | int(11)       | NO   |     | NULL              |                             |
| BatchNo           | varchar(50)   | YES  | MUL |                   |                             |
| Batch_Id          | varchar(50)   | YES  | MUL |                   |                             |
| State             | tinyint(4)    | YES  |     | 0                 |                             |
...
mysql> select state,reforderno from sc_stockorder_2.outstockorder where reforderno=402828300248;
+-------+--------------+
| state | reforderno   |
+-------+--------------+
|     1 | 402828300248 |
+-------+--------------+
1 row in set, 23288 warnings (0.48 sec)

mysql> update sc_stockorder_2.outstockorder set state = 3 where reforderno in (402828300259,402828300248);
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'CR40020180611004'

mysql> update sc_stockorder_2.outstockorder set state=3 where reforderno='402828300248';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

出錯原因:where條件中的值傳入了錯誤的資料型別。reforderno是bigint型別的但是實際儲存的。
具體原因待查!