mysql 建表时设置默认当前时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 建表时设置默认当前时间相关的知识,希望对你有一定的参考价值。

我有多个字段需要设置默认时间,类型为varchar,
date1 VARCHAR default now(),
date2 VARCHAR default now(),
.....
这样不行,是怎么回事呢?

参考技术A mysql 里面.
默认值, 不允许使用 函数
下面是 例子
mysql> CREATE TABLE test_wang (
-> ID INT,
-> date1 VARCHAR(20),
-> date2 VARCHAR(20)
-> );
Query OK, 0 rows affected (0.01 sec)

-- 对列插入 随机数. 确认 数据是可以存储的.
mysql> insert into test_wang values (1, rand(), rand());
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_wang;
+------+-------------------+-------------------+
| ID | date1 | date2 |
+------+-------------------+-------------------+
| 1 | 0.770875269333716 | 0.351427750989262 |
+------+-------------------+-------------------+
1 row in set (0.00 sec)

-- 这里尝试 设置 列 默认值 为 随机数, 结果失败了.
mysql> ALTER TABLE test_wang
-> MODIFY COLUMN date1
-> VARCHAR(20)
-> DEFAULT RAND() ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'RAND()' at line 4

-- 设置默认值 为 固定值, 是成功的.
mysql> ALTER TABLE test_wang
-> MODIFY COLUMN date1
-> VARCHAR(20)
-> DEFAULT '123' ;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

DROP TABLE test_wang;

-- 如果是 日期的话, 尝试使用 TIMESTAMP 数据类型
-- 来实现这个功能.
mysql> CREATE TABLE test_wang (
-> id INT UNSIGNED AUTO_INCREMENT,
-> date1 TIMESTAMP,
-> date2 TIMESTAMP,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.02 sec)

mysql> insert into test_wang(date1) VALUES (null);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_wang;
+----+---------------------+---------------------+
| id | date1 | date2 |
+----+---------------------+---------------------+
| 1 | 2011-10-12 11:30:26 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)追问

用TIMESTAMP的话,只能得到一个时间,该怎么办呢?
还有,如果用TIMESTAMP的话,每次修改记录的时候,这个时间都会改变,我们的需求不是这样的!

追答

mysql> insert into test_wang(date1) VALUES (null);
Query OK, 1 row affected (0.00 sec)

上面的例子, 你没看明白么?
插入的时候, 传入参数为 null
那么 存储的数据, 是
2011-10-12 11:30:26
包含 年月日 时分秒

但是假如你没有指定列名的话, 例如前面的那个 date2 列
那么这列就没有数据。
也就是
0000-00-00 00:00:00

本回答被提问者采纳
参考技术B date1 VARCHAR default CURRENT_TIMESTAMP, 参考技术C mysql中默认值可以用函数,
例如:
CREATE TABLE IF NOT EXISTS results
(examDate TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '考试时间'
)COMMENT='成绩表';

以上是关于mysql 建表时设置默认当前时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中实现将当前的时间作为建表时的表名

实现建表时对应字段(修改时间)自动生成当时系统时间

mysql怎么在创建表时设置默认时间为系统时间

mysql 时间字段默认设置为当前时间

MySQL 创建表时,设置时间字段自己主动插入当前时间

mysql中怎么设置某字段为当前时间