mysql 默认值 CURRENT_TIMESTAMP 差 8 个小时

本文介绍了如何通过设置MySQL全局变量来调整数据库的时间区域为东八区,并提供了验证配置更改是否生效的方法。

0、参考文档:

https://blog.youkuaiyun.com/cheng137666/article/details/114670465

1、数据库设置

set @@global.time_zone = '+08:00';
flush privileges;

2、断掉连接,重连测试

<think>嗯,用户这次的问题是关于MySQLCURRENT_TIMESTAMP的版本信息和用法,特别是默认值设置。首先,我需要回忆一下相关的MySQL版本变化,尤其是涉及timestamp和datetime类型的默认值设置的部分。 根据之前的引用,我记得在MySQL 5.6.6之前,explicit_defaults_for_timestamp这个系统变量默认是OFF,允许timestamp字段自动设置默认值CURRENT_TIMESTAMP。但到了MySQL 8.0,这个变量默认变为ON,这可能会影响默认值的设置。用户可能在设置默认值时遇到了问题,特别是当使用datetime类型时,因为datetime在旧版本中不能使用CURRENT_TIMESTAMP作为默认值,直到某个版本之后才支持。 需要明确各个版本的支持情况。比如,datetime类型从MySQL 5.6.5开始支持CURRENT_TIMESTAMP作为默认值。而timestamp类型的行为在explicit_defaults_for_timestamp变量开启或关闭时会有不同表现。用户可能在使用ALTER TABLE修改表结构时遇到语法错误,可能是因为版本异或者语法错误。 另外,用户的问题中提到错误信息,比如Error 1048或1064,这可能是因为在旧版本中尝试为datetime字段设置CURRENT_TIMESTAMP默认值,或者因为explicit_defaults_for_timestamp设置导致的问题。需要解释不同版本中的正确用法,以及如何调整系统变量来解决这些问题。 还要注意用户可能混淆了timestamp和datetime类型在默认值设置上的区别,需要分别说明。同时,应该提供具体的SQL示例,比如创建表时的语句,以及如何修改系统变量。此外,生成相关问题时要覆盖常见的使用场景和错误处理,帮助用户进一步理解可能出现的问题。</think>### MySQLCURRENT_TIMESTAMP的版本异与用法说明 #### 1. **版本兼容性** - **MySQL 5.6.6之前**: 系统变量`explicit_defaults_for_timestamp`默认值为`OFF`,允许`TIMESTAMP`类型字段自动设置默认值为`CURRENT_TIMESTAMP`,并且支持自动更新。但此时`DATETIME`类型**不支持**使用`CURRENT_TIMESTAMP`作为默认值[^1][^4]。 - **MySQL 5.6.6及之后**: 引入`explicit_defaults_for_timestamp`变量,默认值仍为`OFF`,但允许通过动态修改此变量控制`TIMESTAMP`列的默认行为。从**MySQL 8.0**开始,该变量默认值改为`ON`,此时需显式指定`TIMESTAMP`列的默认值[^1][^4]。 - **DATETIME类型的支持**: 从**MySQL 5.6.5**版本开始,`DATETIME`类型字段可以设置默认值为`CURRENT_TIMESTAMP`[^3]。 --- #### 2. **默认值设置语法** - **创建表时指定默认值**: ```sql CREATE TABLE example ( id INT PRIMARY KEY, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- TIMESTAMP类型 update_time DATETIME DEFAULT CURRENT_TIMESTAMP -- MySQL 5.6.5+支持 ); ``` - **修改已有表的字段**: 需使用`ALTER TABLE`语句,且语法需严格匹配: ```sql -- 修改TIMESTAMP字段 ALTER TABLE example MODIFY COLUMN create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP; -- 修改DATETIME字段(需版本≥5.6.5) ALTER TABLE example MODIFY COLUMN update_time DATETIME DEFAULT CURRENT_TIMESTAMP; ``` **注意**:直接通过可视化工具操作可能报错,建议使用SQL脚本[^2][^3]。 --- #### 3. **常见错误与解决方法** - **错误1:`Invalid default value`** **原因**:`DATETIME`类型在旧版本(<5.6.5)中使用`CURRENT_TIMESTAMP`作为默认值。 **解决**:升级MySQL版本或改用`TIMESTAMP`类型[^3]。 - **错误2:`Column cannot be NULL`** **原因**:当`explicit_defaults_for_timestamp=ON`时,未显式设置`TIMESTAMP`的默认值且未允许`NULL`。 **解决**:修改变量值为`OFF`或显式指定默认值: ```sql SET GLOBAL explicit_defaults_for_timestamp = OFF; -- 需管理员权限 ``` - **错误3:语法错误`near 'CURRENT_TIMESTAMP'`** **原因**:SQL语句中存在拼写错误或上下文不匹配。 **解决**:检查语句格式,例如确保`DEFAULT`关键字位置正确[^2][^4]。 --- #### 4. **关键系统变量说明** 变量名:`explicit_defaults_for_timestamp` - **作用**:控制`TIMESTAMP`列的默认值和`NULL`行为。 - **取值**: - `OFF`(传统模式):自动设置默认值为`CURRENT_TIMESTAMP`,且首列`TIMESTAMP`字段会自动更新。 - `ON`(严格模式):需显式指定默认值,且允许`TIMESTAMP`列存储`NULL`值[^1][^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值