日期类型区别及用途

MySQL 的日期类型有5个,分别是: date、time、year、datetime、timestamp。
将在 “菜鸟教程” 和百度获取的资料,整理成如下表格:

类型 字节 格式 用途 是否支持设置系统默认值
date 3 YYYY-MM-DD 日期值 不支持
time 3 HH:MM:SS 时间值或持续时间 不支持
year 1 YYYY 年份 不支持
datetime 8 YYYY-MM-DD HH:MM:SS 日期和时间混合值 不支持
timestamp 4 YYYYMMDD HHMMSS 混合日期和时间,可作时间戳 支持

日期类型的 default 设置

关于 default 设置,通常情况下会使用当前时间作为默认值。
Example:

ts_time timestamp NOT NULL DEFAULT NOW();
ts_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP();

根据上表可知,除了 timestamp 类型支持系统默认值设置,其他类型都不支持。
如果建表语句中有:

ts_time1 time NOT NULL DEFAULT NOW();
ts_time3 yearNOT NULL DEFAULT NOW();
ts_time2 date NOT NULL DEFAULT CURRENT_TIMESTAMP();
ts_time2 datetime NOT NULL DEFAULT CURRENT_TIMESTAMP();

都会报错。所以想要设置某个日期列的默认值为当前时间,只能使用 timestamp 类型,并设置 DEFAULT NOW() 或 DEFAULT CURRENT_TIMESTAMP() 作为默认值。

date 类型默认值使用 current_date() 创建失败

date 类型默认值使用 now() 创建失败

date 类型默认值使用 current_timestamp() 创建失败

datetime 类型默认值使用 current_timestamp() 创建失败

datetime 类型默认值使用 now() 创建失败

timestamp 类型默认值使用 now() 创建成功

常见的日期获取函数

MySQL中有一些日期函数可供我们使用,我们可以使用 ” select 函数名() ; ” 的 sql 查看它们的返回值。同时也可以使用 “select 自定义函数名();”,调用我们自己定义的函数。
Eample:

select current_timestamp();
select current_date();
select current_time();
select now();

参照 “w3School相关内容” ,其他常见的日期函数如下

函数 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间

其他的内容

更多的MySQL Date 类型或 Date 处理函数,请移步:
MySQL 数据类型 – 菜鸟教程网
SQL Date 函数 – W3School
MySQL日期时间函数大全 – zeroone

MySQL 设置当前 时间 为默认值的问题我们经常会遇到,下面就为您介绍 MySQL 设置当前 时间 为默认值的实现全步骤,希望对您能有所启迪。数据库:test_db1创建表:test_ta1两个字段:id              (自增 且为主键),createtime 创建日期(默认值为当前 时间 ) 方法一、是用alert table语句: 代码如下:use test_db1; create table test_ta1( id mediumint(8) unsigned not nulll auto_increment, createtime datetime, primary key (id) )e
修改 日期类 timestamp 并允许空,如下: CREATE TABLE dutest (aaaa varchar(50) NOT NULL,createday timestamp NULL DEFAULT CURRENT_ TIMESTAMP ON UPDATE CURRENT_ TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果是在navicat下操作的话,zhi设置dao字段的 类型 timestamp ,默认值写上CURRENT_ TIMESTAMP CREATE TABLE `table1` ( `id` int(11) NOT NULL, `createtime` timestamp NULL default CURRENT_ TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 若是手动...
1.DEFAULT CURRENT_ TIMESTAMP () create table `new`( `id` int(4) primary key auto_increment, `create_date` TIMESTAMP DEFAULT CURRENT_ TIMESTAMP () 2.DEFAULT CURRENT_ TIMESTAMP create table `new`( `id` int(4) prim
环境 MySQL 5.1 + 命令行工具 问题 MySQL 表字段设置默认值 解决 代码如下: –SQL: CREATE TABLE test( i_a int NOT NULL DEFAULT 1, ts_b timestamp NOT NULL DEFAULT NOW(), c_c char(2) NOT NULL DEFAULT ‘1’ ); –以下SQL不合法 –time_d time NOT NULL DEFAULT CURTIME(), –date_e date NOT NULL DEFAULT CURDATE(), –datetime_f datetime NOT NULL DE
所以以 代码如下:create_time datetime default now() 的形式设置默认值是不可能的。 代替的方案是使用 TIMESTAMP 类型 代替DATETIME 类型 。 CURRENT_ TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段不会改变。 CURRENT_ TIMESTAMP ON UPDATE CURRENT_ TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段将会改变。即 时间 变为了更新时候的 时间 。(注意一个UPDATE设置一个列为它已经有的值,这将不引起 TIMESTAMP 列被更新,因为如果你设置一个列为它当前的值, MySQL 为了效率而忽略更改
先看一下最简单的例子,在test中,添加一个字段,字段名为birth, 类型 为date 类型 mysql > alter table test add column birth date; Query OK, 0 rows affected (0.36 sec) Records: 0  Duplicates: 0  Warnings: 0 查询一下数据,看看结果: mysql > select * from test; +——+——–+———————————-+————+——-+ | t_id | t_name | t_password                       | t_birth
`holiday_date` date NOT NULL DEFAULT '1992-09-09' COMMENT '节日的 时间 ' date格式的设置默认值,current_date,current_ timestamp 等方法好像都不可以的,需要用字符串设置一个默认的日期。