`
monsterfairy
  • 浏览: 6894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

MySQL 日期和时间类型

阅读更多

MySQL表示时间值的DATE和时间类型为DATETIMEDATETIMESTAMPTIMEYEAR

每个时间类型有一个有效值范围和一个“”值,当指定不合法的MySQL不能表示的值时使用“”值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

 

如果试图插入一个不合法的日期,MySQL将给出警告或错误。可以使用ALLOW_INVALID_DATES SQL模式让MySQL接受某些日期,例如'1999-11-31'。当你想要保存一个“可能错误的”用户已经在数据库中指定(例如,以web形式)用于将来处理的值时很有用。在这种模式下,MySQL只验证月范围为从012,日范围为从031。这些范围可以包括零,因为MySQL允许在DATEDATETIME列保存日/月和日是零的日期。这在应用程序需要保存一个你不知道确切日期的生日时非常有用。在这种情况下,只需要将日期保存为'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 日期和时间类型.pdf

    以下是对MySQL中几种主要日期和时间类型的详细说明: 1. **DATE** 类型: DATE 类型用于存储日期,格式为 `YYYY-MM-DD`,占用3个字节,表示的范围是从 '1000-01-01' 到 '9999-12-31'。它适用于只关心日期而不涉及...

    MySQL日期数据类型、MySQL时间类型使用总结.docx

    MySQL数据库在处理日期和时间数据时提供了多种数据类型,包括日期类型和时间...在MySQL 5.x及以上版本中,这些日期时间类型仅支持到秒级别,不包含毫秒或微秒。如果你需要更高的精度,可能需要在应用程序层面进行处理。

    MySQL日期数据类型、MySQL时间类型使用总结

    ### MySQL日期数据类型与时间类型使用总结 在MySQL数据库中,日期和时间是十分重要的数据类型,被广泛应用于各种业务场景之中。为了更好地理解和运用这些数据类型,本篇将对MySQL中的日期数据类型和时间类型进行...

    mysql的日期和时间函数.rar

    通过深入学习和实践这些MySQL日期和时间函数,开发者可以更有效地管理数据库中的日期和时间数据,创建出更加精确和复杂的查询语句。这个教程文档“mysql的日期和时间函数.doc”应该包含了详细解释和实例,帮助读者更...

    mysql时间类型对应的java类型1

    MySQL数据库提供了多种时间类型来处理日期和时间数据: 1. **DATE**:这个类型仅存储日期,格式为'YYYY-MM-DD',不包含时间部分。在Java中,对应的类型是`java.sql.Date`,它表示没有时间部分的日期。 2. **TIME**...

    Mysql日期和时间函数大全[归类].pdf

    Mysql日期和时间函数大全是Mysql中日期和时间处理函数的集合,它们用于处理日期和时间类型的数据。这些函数可以用于各种日期和时间相关的计算、比较和格式化操作。 日期和时间类型 在Mysql中,日期和时间类型包括...

    MySQL教程.docx

    * MySQL 日期和时间类型 * MySQL 字符串类型 * MySQL 二进制类型 * MySQL 数据类型的选择 * MySQL 转义字符的使用 * MySQL 系统变量 * MySQL 存储引擎有哪些? * MySQL InnoDB 存储引擎 * MySQL MyISAM 存储引擎 * ...

    Java数据类型和MySql数据类型对应一览

    在 MySql 中,日期时间类型对应的是 DATE、TIME、DATETIME、TIMESTAMP 等类型。其中,DATE 类型用于存储日期,TIME 类型用于存储时间,DATETIME 类型用于存储日期和时间,TIMESTAMP 类型用于存储时间戳。 布尔类型 ...

    mysql日期函数时间函数及加减运算

    MySQL 日期函数和时间函数是 MySQL 中非常重要的函数,用于处理日期和时间数据类型。这些函数可以帮助开发者快速获得当前日期和时间、执行日期和时间相关的操作。 获得当前日期时间函数 MySQL 中有多种方式可以...

    2011年MySQL日期数据类型、MySQL时间类型使用总结.doc

    MySQL数据库在处理日期和时间数据时提供了多种数据类型,包括日期类型和时间类型,每种类型都有其特定的格式、存储空间占用以及适用范围。在选择适合的数据类型时,需要根据实际需求进行权衡。 首先,让我们来看看...

    mysql 日期与时间的转换

    对于相反的操作——即从MySQL日期到Unix时间戳的转换,MySQL提供了一个名为`UNIX_TIMESTAMP()`的函数。该函数可以接受一个日期参数并返回对应的Unix时间戳值。 ##### 示例: ```sql SELECT UNIX_TIMESTAMP('2009-08...

    MySQL日期数据类型、MySQL时间类型使用总结.doc

    MySQL日期数据类型、MySQL时间类型使用总结.doc

    mysql日期和时间格式转

    本文将详细介绍 MySQL 中与日期和时间相关的各种数据类型及其转换方法,并结合具体示例进行说明。 #### TO_DAYS 和 FROM_DAYS 函数 - **TO_DAYS**:此函数用于将日期转换为天数,该天数表示自 '0000-00-00' 至指定...

    MySQL基础语法-日期和时间数据类型.pdf

    MySQL基础语法——日期和时间数据类型

    Java中数据类型和MYSQL中数据类型的对比

    2. 日期和时间类型:MySQL 的日期和时间类型包括 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。DATETIME 可以存储日期和时间,而 DATE 和 TIME 分别只存储日期和时间部分。TIMESTAMP 类型特别之处在于它可以自动更新,...

    MySql性能调优(一)字段类型的选取之时间类型

    在本文中,我们将讨论 MySQL 中的时间类型,包括 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等五种类型,并介绍各自的特点和应用场景。 DATE 类型 DATE 类型用于存储日期信息,格式为 ‘YYYY-MM-DD’,占用 3 字节...

    MySql于Java数据类型对应列表

    DATETIME (日期时间) **显示长度:** 19 **数据库类型:** DATETIME **JAVA类型:** `java.sql.Timestamp` **JDBC类型:** 93 **描述:** `DATETIME` 用于存储日期和时间组合值(年月日小时分钟秒)。在Java中,它...

    Java数据类型和MySql数据类型对应表

    MySql 提供了多种数据类型,包括整数类型、浮点数类型、字符串类型、日期时间类型、枚举类型等。每种数据类型都有其特点和用法。 在 MySql 中,整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 等。这些...

    MySQL-数据类型、字符串类型、日期时间类型

    MySQL--数据类型、字符串类型、日期时间类型

Global site tag (gtag.js) - Google Analytics