操作服务器环境为Linux centos5.7
安装的mysql版本 MariaDB,图简单直接使用命令install上去的。
在自己mac上测试数据库修改Alter语句没有问题的,
ALTER TABLE `XXX`.`XXX` ADD COLUMN `createtime` datetime NOT NULL DEFAULT NOW() AFTER `userinfo`;
但是在服务器上修改运行则 提示错误:
ERROR 1067 (42000): Invalid default value for 'createtime'
查了查很多说是sql_mode设置的不对,查了下没有设置都是空的,
但是发现了一个问题 ,就是mysql版本是
MariaDB [XXX]> show variables like 'version';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| version | 5.5.52-MariaDB |
+---------------+----------------+
而测试机环境是 version 5.7.17。
》》》查资料了一番后,得知datetime类型只支持Mysql5.6.5以上版本。
修改测试语句--- 将 datetime 换成 TIMESTAMP 即可:
ALTER TABLE `XXX`.`XXX` MODIFY COLUMN `createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
+------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| createtime | timestamp | NO | | CURRENT_TIMESTAMP | |
+------------+--------------+------+-----+-------------------+----------------+
还有,“DEFAULT NOW()” 命令行不太好使,但客户端执行没问题
参考:
http://stackoverflow.com/questions/168736/how-do-you-set-a-default-value-for-a-mysql-datetime-column/10603198
原文链接:http://zl378837964.iteye.com/blog/2368532
相关推荐
MySQL 中的 datetime 类型字段无法使用函数作为默认值,因此无法使用 `create_time datetime default now()` 的形式设置默认值。代替的方案是使用 TIMESTAMP 类型代替 DATETIME 类型。 TIMESTAMP 类型有两个重要的...
当在表定义中设置字段的默认值时,可以使用`GETDATE()`来确保该字段总是被填充为创建记录时的当前时间。例如,创建一个包含日期字段的表,并设置其默认值为`GETDATE()`: ```sql CREATE TABLE Orders ( OrderID ...
在 MySQL 中,我们可以为字段设置默认值,以便在插入数据时自动填充。例如,创建一个 Message 表,设置 Content 字段的默认值: ```sql CREATE TABLE Message ( Message_ID int NOT NULL PRIMARY KEY AUTO_...
在SQL Server(MSSQL)中,我们可以为`date`类型设置`GETDATE()`作为默认值,为`char`类型设置`NULL`,但在MySQL中,这些规则并不适用。例如,对于MySQL,`date`类型默认值应留空(NULL),`char`类型如果不能为空,...
MySQL数据库在5.7版本之后,对于`date`和`datetime`类型的字段,设置默认值为"0000-00-00"时会出现错误提示“Invalid default value for 'time'”。这个问题源于MySQL的`sql_mode`配置,特别是其中的`NO_ZERO_IN_...
但是,如果我们不需要自动更新时间,可以将 TIMESTAMP 类型设置为默认值为空,例如: `CREATE TABLE users (id INT, last_updated TIMESTAMP DEFAULT NULL);` 选择合适的时间类型对数据库的性能和数据存储效率具有...
- 创建新表时,可以使用`DEFAULT CURRENT_TIMESTAMP`为`TIMESTAMP`字段设置默认值,例如: ```sql CREATE TABLE table_name ( create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', ... ); ...
例如,在创建`USER`表时,`REGISTRATION_TIME`和`LAST_LOGIN_TIME`字段被定义为`TIMESTAMP`类型,并分别设置了默认值为`CURRENT_TIMESTAMP`,这意味着每当有新记录插入时,如果没有显式提供时间,则这两个字段将自动...
例如,如果你想在名为`students`的表中添加一个`age`字段,类型为整型,并设置默认值为18,你可以使用以下语句: ```sql ALTER TABLE students ADD age INT DEFAULT 18; ``` 如果你希望新字段位于已有字段`name`...
例如,创建一个名为 `default_datetime` 的触发器,用于在插入记录时设置 `create_time` 字段的默认值: ```sql DELIMITER | CREATE TRIGGER default_datetime BEFORE INSERT ON test_time FOR EACH ROW IF NEW....
在这个例子中,`ALTER TABLE`语句改变了`createtime`字段的数据类型为`TIMESTAMP`,并设置了默认值为`NOW()`,这会返回当前的日期和时间。 方法二是在创建表的时候就直接设置默认值。如果你还未创建表,可以使用...
此外,需要注意的是,从MySQL 5.6.5版本开始,可以设置多个字段的默认值为`CURRENT_TIMESTAMP`,但只有一个可以设置为`ON UPDATE CURRENT_TIMESTAMP`,这意味着只有这个字段会在记录更新时自动更新。如果你想要在多...
字段属性主要包括是否可为空(NULL/NOT NULL)、主键(PRIMARY KEY)、唯一键(UNIQUE KEY)、自增长(AUTO_INCREMENT)和默认值(DEFAULT)。NULL属性允许字段值为空,NOT NULL则不允许为空。主键用于标识表中每条...