mysql 出现 "1067 - Invalid default value for 'UPDATE_TIME' " 错误提示的解决办法

问题:

由于 tmp_wrh_1 的字段UPDATE_TIME 的字段类型是 timestamp ,默认值是:'0000-00-00 00:00:00'

即:`UPDATE_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间';

在对这个表进行操作的时候,

如:alter table tmp_wrh_1 MODIFY column BUSINESS_TYPE varchar(5) comment 'hhr-服务费提现'; --执行失败

会出现错误提示: 1067 - Invalid default value for 'UPDATE_TIME' 

 

问题分析:

因为timestamp类型取值范围:1970-01-01 00:00:00 到 2037-12-31 23:59:59,

所以必须得把字段UPDATE_TIME 的默认值修改成:1970-01-01 00:00:00 到 2037-12-31 23:59:59 之间的值,

发现 默认值必须在1970-01-01 10:00:00 以后才修改成功,不知道什么原因!

问题解决:

alter table tmp_wrh_1 alter column update_time drop default;
alter table tmp_wrh_1 alter column UPDATE_TIME set default '1970-01-01 10:00:00';

alter table tmp_wrh_1 MODIFY column BUSINESS_TYPE varchar(5) comment 'hhr-服务费提现'; --执行成功

 

### 关于 MySQL 中 `update_time` 字段无效默认值错误的解决方案 当遇到 MySQL 报错提示 `invalid default value for 'update_time'` 时,通常是因为 SQL 模式 (sql_mode) 设置不兼容所导致。具体来说,在较新的 MySQL 版本中,默认启用了严格模式 (`STRICT_TRANS_TABLES`) 和其他约束条件,这使得某些日期时间类型的字段无法接受非法或不符合逻辑的默认值。 #### 解决方案一:修改表结构中的字段定义 可以通过调整字段定义来移除或更改其默认值设置。例如: ```sql ALTER TABLE your_table_name MODIFY COLUMN update_time TIMESTAMP NULL DEFAULT NULL; ``` 上述语句将 `update_time` 列改为允许为空,并将其默认值设为 `NULL`,从而避免触发该错误[^1]。 #### 解决方案二:调整全局变量 sql_mode 如果希望保留现有表结构而不做任何改动,则可以考虑通过修改服务器配置文件或者动态改变会话级别的 `sql_mode` 来解决问题。比如执行以下命令临时关闭严格模式: ```sql SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_ALL_TABLES','')); SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_ALL_TABLES','')); ``` 需要注意的是,这种方式可能会影响数据完整性和一致性验证机制,因此仅建议用于开发环境调试阶段而非生产环境中长期应用[^2]。 另外一种方法是在启动数据库服务之前编辑 my.cnf 或者 my.ini 文件(取决于操作系统),找到并注释掉有关 strict_trans_tables 参数的部分: ```ini # Remove STRICT_TRANS_TABLES from the following line if present. sql-mode="ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" ``` 之后重启MySQL服务使变更生效即可[^3]。 #### 方案三:升级至更高版本XtraBackup工具 对于特定场景下由备份恢复引起此问题的情况,确认使用的 Percona XtraBackup 工具是否最新非常重要。因为旧版可能存在未处理好此类元信息同步的问题,而新版本已经对此有所改进。所以推荐尝试更新到至少支持修复该类BUG的新发行版号如8.0.32及以上版本。 ### 注意事项 无论采取哪种方式都需要谨慎操作以免造成不可逆的数据丢失风险;同时也要充分测试各种边界情况下的行为表现以确保业务正常运行不受影响。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值