Mysql5.7.26导入表的过程中报错:[ERR] 1067 - Invalid default value for ‘update_time‘

博客讲述了在Mysql5.7中遇到'0000-00-00 00:00:00'作为datetime字段默认值导致的错误1067。作者通过调整sql_mode解决了问题,具体方法是在my.ini文件中添加sql_mode配置并重启Mysql服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度一下“[ERR] 1067 - Invalid default value for”,看到这篇文章这样写的

timestamp类型对应日期范围为:1970-01-01 00:00:01 ~ 2037-12-31 23:59:5,因为导入的表字段update_time默认值不在该区间内,所以报错。

报错的原因是:sql_mode配置问题

以上是网上说的,而我的实际情况是:

news表update_time字段类型是datetime,这个默认值'0000-00-00 00:00:00'在版本Mysql5.7.26中估计也是错的

`update_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间',

当添加主键操作时出错如下,

[SQL]ALTER TABLE `news`
  ADD PRIMARY KEY (`id`);

[ERR] 1067 - Invalid default value for 'update_time'

 

我的系统是window10,php环境是xp小皮phpstudy_pro,按网上说的操作如下:

----------------

在Mysql5.7之后,Mysql使用的是严格模式,sql_mode默认配置为:ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
解决办法:在mysql安装根目录新建my.ini文件(windows环境),添加sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启Mysql服务,重新导入数据库成功!!!

-------------------

执行完成结果:

[SQL]ALTER TABLE `news`
  ADD PRIMARY KEY (`id`);
受影响的行: 0
时间: 0.843s

确实成功了,

后记:遇到问题要敢于尝试,万一成功了呢

 

 

<think>好的,用户遇到了MySQL中创建时间字段默认值无效的问题,具体是错误1067。我需要先理解这个错误的常见原因。首先,MySQL的版本可能是一个因素,因为从5.6.5开始,DATETIMETIMESTAMP类型支持默认值为CURRENT_TIMESTAMP。如果用户使用的是较旧的版本,可能会导致问题。 然后,检查用户创建时的SQL语句。比如,用户可能尝试为DATETIME字段设置默认值为CURRENT_TIMESTAMP,但在旧版本中这不允许。比如,错误示例可能是这样的: ```sql CREATE TABLE example ( create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` 在旧版本中,这会导致错误,因为只有TIMESTAMP类型支持这种默认值。这时候需要将字段类型改为TIMESTAMP或者升级MySQL版本。 另外,用户可能没有正确配置SQL模式。如果启用了严格模式(如STRICT_TRANS_TABLES),可能会阻止某些默认值的设置。需要检查sql_mode的设置,可能需要去掉NO_ZERO_DATE或NO_ZERO_IN_DATE等选项。 还有,时区设置也可能影响TIMESTAMP字段的默认值,但通常不会直接导致错误1067,不过还是需要考虑。此外,权限问题虽然可能性较低,但如果有引用[2]提到的权限限制,是否会影响字段的创建?不过这个错误更多是语法或配置问题,而非权限。 用户提供的引用[3]提到可以跳过某些外部设施的集成,比如--skip-xxx-xxx选项,但这个问题似乎与外部设施无关,可能不需要考虑这个引用。引用[1]展示了重启MySQL服务的命令,这可能意味着用户需要重启使配置生效,比如修改sql_mode后需要重启服务。 解决方案可能包括: 1. 修改字段类型为TIMESTAMP。 2. 升级MySQL5.6.5或更高版本。 3. 调整sql_mode,关闭严格模式或相关选项。 4. 检查并修正SQL语法中的其他潜在错误。 需要分步骤指导用户检查版本、修改字段类型、调整配置,并验证结果。同时,生成相关问题帮助用户深入理解可能涉及的配置和版本差异。</think>### 逐步解答:MySQL Error 1067 默认值无效问题 #### 1. 确认MySQL版本 **原因**: -MySQL 5.6.5之前,只有`TIMESTAMP`类型支持默认值为`CURRENT_TIMESTAMP`,而`DATETIME`不支持[^1]。 - 若版本低于5.6.5,尝试将字段类型改为`TIMESTAMP`。 **操作**: ```sql -- 查看MySQL版本 SELECT VERSION(); -- 示例修改字段类型 CREATE TABLE test_table ( create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` --- #### 2. 检查SQL模式配置 **原因**: - 若SQL模式包含`NO_ZERO_DATE`或`NO_ZERO_IN_DATE`,可能导致默认值冲突。 - 严格模式(如`STRICT_TRANS_TABLES`)会拒绝无效默认值。 **操作**: ```sql -- 查看当前SQL模式 SHOW VARIABLES LIKE 'sql_mode'; -- 临时修改SQL模式(重启后失效) SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'; -- 永久修改需编辑my.cnf文件,例如: -- sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" -- 修改后重启MySQL服务(参考引用[1]) /etc/init.d/mysqld restart ``` --- #### 3. 验证字段定义语法 **错误示例**: ```sql CREATE TABLE invalid_example ( create_time DATETIME DEFAULT '0000-00-00 00:00:00' -- 若启用了NO_ZERO_DATE会报错 ); ``` **修正方案**: ```sql -- 使用TIMESTAMP类型或明确指定合法默认值 CREATE TABLE valid_example ( create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 或指定合法的DATETIME默认值(需MySQL 5.6.5+) CREATE TABLE valid_example ( create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` --- #### 4. 其他可能原因 - **权限问题**:确保用户有权限修改结构(引用[2]中权限控制可能影响操作)。 - **时区设置**:若使用`TIMESTAMP`,检查时区是否一致: ```sql SET time_zone = '+08:00'; -- 设置为东八区 ``` --- ### 总结步骤 1. **升级MySQL版本**至5.6.5以上(推荐)。 2. **修改字段类型**为`TIMESTAMP`(若版本低)。 3. **调整SQL模式**,关闭冲突选项。 4. **验证语法和权限**。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值