MySQL表示时间值的DATE和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
如果试图插入一个不合法的日期,MySQL将给出警告或错误。可以使用ALLOW_INVALID_DATES
SQL模式让MySQL接受某些日期,例如'1999-11-31'。当你想要保存一个“可能错误的”用户已经在数据库中指定(例如,以web形式)用于将来处理的值时很有用。在这种模式下,MySQL只验证月范围为从0到12,日范围为从0到31。这些范围可以包括零,因为MySQL允许在DATE或DATETIME列保存日/月和日是零的日期。这在应用程序需要保存一个你不知道确切日期的生日时非常有用。在这种情况下,只需要将日期保存为'1999-00-00'或'1999-01-00'。如果保存此类日期,DATE_SUB()或DATE_ADD等需要完整日期的函数不会得到正确的结果。(如果你不想在日期中出现零,可以使用NO_ZERO_IN_DATE
SQL模式)。
MySQL还允许将'0000-00-00'保存为“伪日期”(如果不使用NO_ZERO_DATE
SQL模式)。这在某些情况下比使用NULL值更方便(并且数据和索引占用的空间更小)。
当使用日期和时间类型时应记住以下几点:
MySQL以标准输出格式检索给定日期或时间类型的值,但它尽力解释你指定的各种输入值格式(例如,当你指定一个分配给或与日期或时间类型进行比较的值时)。只支持下面章节中描述的格式。期望你能提供有效值。如果你使用其它格式的值会发生意想不到的结果。
包含两位年值的日期会令人模糊,因为世纪不知道。MySQL使用以下规则解释两位年值:
70-99范围的年值转换为1970-1999。
00-69范围的年值转换为2000-2069。
尽管MySQL尝试解释几种格式的值,日期总是以年-月-日顺序(例如,'98-09-04'),而不是其它地方常用的月-日-年或日-月-年顺序(例如,'09-04-98','04-09-98')。
如果值用于数值上下文中,MySQL自动将日期或时间类型的值转换为数字,反之亦然。
当 MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时(如本节开始所描述),它将该值转换为该类的“零”值。一个例外是超出范围的TIME值被裁剪到TIME范围的相应端点。
下面的表显示了各类“零”值的格式。请注意如果启用NO_ZERO_DATE
SQL模式,使用这些值会产生警告。
列类型
|
“零”值
|
DATETIME
|
'0000-00-00
00:00:00'
|
DATE
|
'0000-00-00'
|
TIMESTAMP
|
00000000000000
|
TIME
|
'00:00:00'
|
YEAR
|
0000
|
“零”值是特殊值,但你可以使用表内显示的值显式保存或引用它们。你也可以使用值'0'或0来保存或引用,写起来更容易。
MyODBC中使用的“零”日期或时间值在MyODBC
2.50.12和以上版本中被自动转换为NULL,因为ODBC不能处理此类值。
具体类型区别就不在这里写了。
另外TIMESTAMP的一个小应用在这里分享一下:
timestamp一个功能是在定义一个字段的时候可以default current_timestamp 和 on update current_timestamp;即当记录Item insert和update的时间。
但是有一个约定,如果需要一个表里有两个字段,一个自动记录insert的时间,另一个记录update的时间,这个时候定义是不支持的;
mysql> create table demo(demo_insert timestamp default current_timestamp,demo_updated timestamp on update current_timestamp,demo_value varchar(100));
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
现在把那条SQL稍微变一下:
mysql> create table demo(demo_insert timestamp default 0,demo_updated timestamp on update current_timestamp,demo_value varchar(100));
Query OK, 0 rows affected (0.02 sec)
这样是OK的。
现在看看如何应用:
mysql> show create table demo\G;
*************************** 1. row ***************************
Table: demo
Create Table: CREATE TABLE `demo` (
`demo_insert` timestamp NOT NULL default '0000-00-00 00:00:00',
`demo_updated` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
`demo_value` varchar(100) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
mysql> insert into demo (demo_insert, demo_value) values (null,'http://alex-j.iteye.com');
Query OK, 1 row affected (0.00 sec)
mysql> select * from demo;
+---------------------+---------------------+---------------------------+
| demo_insert | demo_updated | demo_value |
+---------------------+---------------------+---------------------------+
| 2010-08-24 17:22:53 | 0000-00-00 00:00:00 | http://alex-j.iteye.com |
+---------------------+---------------------+---------------------------+
1 row in set (0.00 sec)
mysql> update demo set demovalue='alex-j.iteye.com';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from demo;
+---------------------+---------------------+--------------------+
| demo_insert | demo_updated | demo_value |
+---------------------+---------------------+--------------------+
| 2010-08-24 17:22:53 | 2010-08-24 17:24:45 | alex-j.iteye.com |
+---------------------+---------------------+--------------------+
1 row in set (0.00 sec)
为什么可以这样用,我们看看文档说明
TIMESTAMP columns are NOT NULL by default, cannot contain NULL values, and assigning NULL assigns the current timestamp.
If you insert NULL into a TIMESTAMP column, the current date and time is inserted。
所以为什么我们写第一条Insert SQL的时候
insert into demo (demo_insert, demo_value) values (null, 'http://alex-j.iteye.com');
分享到:
相关推荐
以下是对MySQL中几种主要日期和时间类型的详细说明: 1. **DATE** 类型: DATE 类型用于存储日期,格式为 `YYYY-MM-DD`,占用3个字节,表示的范围是从 '1000-01-01' 到 '9999-12-31'。它适用于只关心日期而不涉及...
MySQL数据库在处理日期和时间数据时提供了多种数据类型,包括日期类型和时间...在MySQL 5.x及以上版本中,这些日期时间类型仅支持到秒级别,不包含毫秒或微秒。如果你需要更高的精度,可能需要在应用程序层面进行处理。
### MySQL日期数据类型与时间类型使用总结 在MySQL数据库中,日期和时间是十分重要的数据类型,被广泛应用于各种业务场景之中。为了更好地理解和运用这些数据类型,本篇将对MySQL中的日期数据类型和时间类型进行...
通过深入学习和实践这些MySQL日期和时间函数,开发者可以更有效地管理数据库中的日期和时间数据,创建出更加精确和复杂的查询语句。这个教程文档“mysql的日期和时间函数.doc”应该包含了详细解释和实例,帮助读者更...
MySQL数据库提供了多种时间类型来处理日期和时间数据: 1. **DATE**:这个类型仅存储日期,格式为'YYYY-MM-DD',不包含时间部分。在Java中,对应的类型是`java.sql.Date`,它表示没有时间部分的日期。 2. **TIME**...
Mysql日期和时间函数大全是Mysql中日期和时间处理函数的集合,它们用于处理日期和时间类型的数据。这些函数可以用于各种日期和时间相关的计算、比较和格式化操作。 日期和时间类型 在Mysql中,日期和时间类型包括...
* MySQL 日期和时间类型 * MySQL 字符串类型 * MySQL 二进制类型 * MySQL 数据类型的选择 * MySQL 转义字符的使用 * MySQL 系统变量 * MySQL 存储引擎有哪些? * MySQL InnoDB 存储引擎 * MySQL MyISAM 存储引擎 * ...
在 MySql 中,日期时间类型对应的是 DATE、TIME、DATETIME、TIMESTAMP 等类型。其中,DATE 类型用于存储日期,TIME 类型用于存储时间,DATETIME 类型用于存储日期和时间,TIMESTAMP 类型用于存储时间戳。 布尔类型 ...
MySQL 日期函数和时间函数是 MySQL 中非常重要的函数,用于处理日期和时间数据类型。这些函数可以帮助开发者快速获得当前日期和时间、执行日期和时间相关的操作。 获得当前日期时间函数 MySQL 中有多种方式可以...
MySQL数据库在处理日期和时间数据时提供了多种数据类型,包括日期类型和时间类型,每种类型都有其特定的格式、存储空间占用以及适用范围。在选择适合的数据类型时,需要根据实际需求进行权衡。 首先,让我们来看看...
对于相反的操作——即从MySQL日期到Unix时间戳的转换,MySQL提供了一个名为`UNIX_TIMESTAMP()`的函数。该函数可以接受一个日期参数并返回对应的Unix时间戳值。 ##### 示例: ```sql SELECT UNIX_TIMESTAMP('2009-08...
MySQL日期数据类型、MySQL时间类型使用总结.doc
本文将详细介绍 MySQL 中与日期和时间相关的各种数据类型及其转换方法,并结合具体示例进行说明。 #### TO_DAYS 和 FROM_DAYS 函数 - **TO_DAYS**:此函数用于将日期转换为天数,该天数表示自 '0000-00-00' 至指定...
MySQL基础语法——日期和时间数据类型
2. 日期和时间类型:MySQL 的日期和时间类型包括 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。DATETIME 可以存储日期和时间,而 DATE 和 TIME 分别只存储日期和时间部分。TIMESTAMP 类型特别之处在于它可以自动更新,...
在本文中,我们将讨论 MySQL 中的时间类型,包括 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等五种类型,并介绍各自的特点和应用场景。 DATE 类型 DATE 类型用于存储日期信息,格式为 ‘YYYY-MM-DD’,占用 3 字节...
DATETIME (日期时间) **显示长度:** 19 **数据库类型:** DATETIME **JAVA类型:** `java.sql.Timestamp` **JDBC类型:** 93 **描述:** `DATETIME` 用于存储日期和时间组合值(年月日小时分钟秒)。在Java中,它...
MySql 提供了多种数据类型,包括整数类型、浮点数类型、字符串类型、日期时间类型、枚举类型等。每种数据类型都有其特点和用法。 在 MySql 中,整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 等。这些...
MySQL--数据类型、字符串类型、日期时间类型