分析
因为这个错误 MySQL 严格检查字符值是否符合字段要求,但有时,这一点 检查结果是错误的。就像下面的例子一样
INSERT INTO cloud_study.study_log(material_id,course_id,type,nginx_time,account_id,chapter_id,session_id,progress,resolution,material_completed,org_id,timestamp,terminal_device,site_id,terminal_type) VALUES(139999999999176203488,143839599972728,video','2021-10-20T10:26:51 08:00',1235479496928576',1438392842444'yn90417914xuixyr16346979133,SD16349248901805872,'iPhone;CPUiPhoneOS10_3_1likeMacOSX','1369096880696819712','wechat') > 1292 - Incorrect datetime value: '2021-10-20T10:26:51 08:00' for column 'nginx_time' at row 1 > 时间: 0.011s
- 查看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'; set global sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';