转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> MySql >> 正文
MySQL 4.1.0 中文参考手册 --- 6.2 列类型         ★★★★

MySQL 4.1.0 中文参考手册 --- 6.2 列类型

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3719 更新时间:2009/4/22 20:56:55
则解释存在二义性的年份值:

  • 在范围 00-69 内的年值被转换为 2000-2069
  • 在范围Y 70-99 内的年值被转换为 1970-1999

记住,这些规则仅仅提供对于你的数据含义的合理猜测。如果 MySQL 使用的探索法无法得到正确的值,你应该以包含 4 位年份的格式提供一个明确的值。

ORDER BY 将以适当的顺序对 2 位 YEAR/DATE/DATETIME 类型排序。

注意,某些像 MIN()MAX() 之类的函数会将 TIMESTAMP/DATE 转换为一个数字。这就意味着,一个 2 位年份的时间戳将完全不能与这些函数一同工作。在这种情况下,解决的办法是将 TIMESTAMP/DATE 转换为 4 位年份格式或者使用诸如 MIN(DATE_ADD(timestamp,INTERVAL 0 DAYS)) 的方法

6.2.2.2 DATETIMEDATETIMESTAMP 类型

DATETIMEDATETIMESTAMP 类型是相似的。这个章节描述了它们的特性以及它们的相似点与不同点。

DATETIME 类型可用于需要同时包含日期和时间信息的值。MySQL 以 ''''YYYY-MM-DD HH:MM:SS'''' 格式检索与显示 DATETIME 类型。支持的范围是 ''''1000-01-01 00:00:00''''''''9999-12-31 23:59:59''''。(“支持”的含义是,尽管更早的值可能工作,但不能保证他们均可以。)

DATE 类型可用于需要一个日期值而不需要时间部分时。MySQL 以 ''''YYYY-MM-DD'''' 格式检索与显示 DATE 值。支持的范围是 ''''1000-01-01''''''''9999-12-31''''

TIMESTAMP 列类型提供了一种类型,通过它你可以以当前操作的日期和时间自动地标记 INSERTUPDATE 操作。如果一张表中有多个 TIMESTAMP 列,只有第一个被自动更新。

自动更新第一个 TIMESTAMP 列在下列任何条件下发生:

  • 列值没有明确地在一个 INSERTLOAD DATA INFILE 语句中被指定。
  • 列值没有明确地在一个 UPDATE 语句中被指定,并且其它的一些列值已发生改变。(注意,当一个 UPDATE 设置一个列值为它原有值时,这将不会引起 TIMESTAMP 列的更新,因为,如果你设置一个列值为它当前值时,MySQL 为了效率为忽略更新。)
  • 明确地以 NULL 设置 TIMESTAMP 列。

第一个列以外其它 TIMESTAMP 列,可以设置到当前的日期和时间,只要将该列赋值 NULLNOW()

任何 TIMESTAMP 列均可以被设置一个不同于当前操作日期与时间的值,这通过为该列明确指定一个你所期望的值来实现。这也适用于第一个 TIMESTAMP 列。这个选择性是很有用的,举例来说,当你希望 TIMESTAMP 列保存该记录行被新添加时的当前的日期和时间,但该值不再发生改变,无论以后是否对该记录行进行过更新:

  • 当该记录行被建立时,让 MySQL 设置该列值。这将初始化该列为当前日期和时间。
  • 以后当你对该记录行的其它列执行更新时,为 TIMESTAMP 列值明确地指定为它原来的值。

另一方面,你可能发现更容易的方法,使用 DATETIME 列,当新建记录行时以 NOW() 初始化该列,以后在对该记录行进行更新时不再处理它。

示例(译者注):

mysql> CREATE TABLE `tA` (
    ->   `id` int(3) unsigned NOT NULL auto_increment,
    ->     `date1` timestamp(14) NOT NULL,
    ->     `date2` timestamp(14) NOT NULL,
    ->     PRIMARY KEY  (`id`)
    -> ) TYPE=MyISAM;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO `tA` SET `id` = 1; 
Query OK, 1 row affected (0.02 sec)
# 没有明确地指定第一个 timestamp 列值,该列值被设为插入的当前时刻
# 没有明确地指定其它的 timestamp 列值,MySQL 则认为插入的是一个非法值,而该列值被设为0
mysql> INSERT INTO `tA` VALUES (2, NOW(), NULL);
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM `tA`;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  1 | 20030503104118 | 00000000000000 |
|  2 | 20030503104254 | 20030503104254 |
+----+----------------+----------------+
2 rows in set (0.00 sec)
mysql> UPDATE `tA` SET `id` = 3 WHERE `id` = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
# 对某一记录行进行了更新,第一个 timestamp 列值也将被更新
mysql> UPDATE `tA` SET `id` = 2 WHERE `id` = 2;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0
# MySQL 忽略了这次操作,第一个 timestamp 列值不会被更新
mysql> SELECT * FROM `tA`;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  3 | 20030503104538 | 00000000000000 |
|  2 | 20030503104254 | 20030503104254 |
+----+----------------+----------------+
2 rows in set (0.00 sec)
mysql> UPDATE `tA` SET `id` = 1,`date1`=`date1` WHERE `id` = 3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
# 明确地指定了第一个 timestamp 列值为它原有值,该值将不会被更新
mysql> SELECT * FROM `tA`;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  1 | 20030503104538 | 00000000000000 |
|  2 | 20030503104254 | 20030503104254 |
+----+----------------+----------------+
2 rows in set (0.00 sec)
* 以上结果在 MySQL 4.0.12 中测试
示例结束(译者注)

TIMESTAMP 值可以从 1970 到 2037 之间的任一时刻,精度为一秒。其值作为数字显示。

MySQL 检索与显示 TIMESTAMP 值的格式取决于它的显示尺寸,描述如下表。“完整”的 TIMESTAMP 格式是 14 位的,但是 TIMESTAMP 列可以以一个更短的显示尺寸建立:

列类型 显示格式 TIMESTAMP(14) YYYYMMDDHHMMSS TIMESTAMP(12) YYMMDDHHMMSS TIMESTAMP(10) YYMMDDHHMM TIMESTAMP(8) YYYYMMDD TIMESTAMP(6) YYMMDD TIMESTAMP(4) YYMM TIMESTAMP(2) YY

所有的 TIMESTAMP 列均有一个相同的存储尺寸,而不考虑显示尺寸的大小。最常见的显示尺寸为 6、8、12 和 14。你可以在表创建时指定一个任意的显示尺寸,但是值 0 或 比 14 大的值将会被强制定义为列长 14。在从 1 ~ 13 范围内的奇数会被强制为下一个更大的偶数。

例如(译者注): 字段定义 强制字段长度 TIMESTAMP(0) TIMESTAMP(14) TIMESTAMP(15) TIMESTAMP(14) TIMESTAMP(1) TIMESTAMP(2) TIMESTAMP(5) TIMESTAMP(6)

注意:从 MySQL 4.1 开始,TIMESTAMP''''YYYY-MM-DD HH:MM:DD'''' 格式作为字符串返回。不同的时间戳长度不再被支持。

译者注:如果你你希望在 MySQL 4.1 中以数字形式返回时间戳,则必须在该时间戳字段后加上 +0。从 MySQL 4.0.12 开始,选项 --new 可以被用来使服务器与 4.1 一样运作。

你可以使用常用的格式集中的任何一个指定 DATETIMEDATETIMESTAMP 值:

  • 一个 ''''YYYY-MM-DD HH:MM:SS''''''''YY-MM-DD HH:MM:SS'''' 格式的字符串。一个“宽松”的语法是被允许的:以任何标点符号作为日期部分和时间部分中的定界符。例如,''''98-12-31 11:30:45''''''''98.12.31 1+30+45''''''''98/12/31 11*30*45''''''''98@12@31 11^30^45'''' 均是等价的。
  • 一个 ''''YYYY-MM-DD''''''''YY-MM-DD'''' 格式的字符串。这里,一个“宽松”的语法同样也是被允许的:例如,''''98.12.31''''''''98-12-31''''''''98/12/31''''''''98@12@31'''' 是等价的。
  • 一个无定界符的 ''''YYYYMMDDHHMMSS''''''''YYMMDDHHMMSS'''' 格式的字符串,只要字符串看起来像是一个日期。例如,''''19970523091528''''''''970523091528'''' 均被解释为 ''''1997-05-23 09:15:28'''',但是 ''''971122129015'''' 却是违法的(它的分部分是无意义的),该值被插入时将变成 ''''0000-00-00 00:00:00''''
  • 一个无定界符的 ''''YYYYMMDD''''''''YYMMDD'''' 格式的字符串,只要字符串看起来像是一个日期。例如,''''19970523''''''''970523'''' 被解释成为 ''''1997-05-23'''',但是 ''''971332'''' 却是违法的(它的月和日部分是无意义的),该值被插入时将变成 ''''0000-00-00''''
  • 一个 YYYYMMDDHHMMSSYYMMDDHHMMSS 格式的数字,只要数字看起来像是一个日期。例如,19830905132800830905132800 被解释成为 ''''1983-09-05 13:28:00''''
  • 一个 YYYYMMDDYYMMDD 格式的数字,只要数字看起来像是一个日期。例如,19830905830905 被解释成为 ''''1983-09-05''''
  • 在一个 DATETIMEDATETIMESTAMP 语境中,一个函数的返回值将随之而变化,例如 NOW()CURRENT_DATE

非法的 DATETIMEDATETIMESTAMP 值将会被转换到适当形式的“零”值(''''0000-00-00 00:00:00''''''''0000-00-00''''00000000000000)。

对于以字符串格式指定的包含日期定界符的值,不必要为小于 10 的月或天的值指定 2 位数字。''''1979-6-9'''' 等同于 ''''1979-06-09''''。同样的,对于以字符串指定的包含时间定界符的值,不必要为小于 10 的时、分或秒指定 2 位数字。''''1979-10-30 1:2:3'''' 等同于 ''''1979-10-30 01:02:03''''

以数字指定的值应该是 6、8、12 或 14 位长。如果数字是 8 或 14 位长的,该值将被假定为年份是由头 4 位数字给出的 YYYYMMDDYYYYMMDDHHMMSS 格式。如果数字是 6 或 12 数字长,它将被假定为年份是由头 2 位数字给出的 YYMMDDYYMMDDHHMMSS 格式。不是这些长度之一的数字通过在值前补零到最接近的长度后解释。

以没有定界符的字符串格式指定的值通过它们给出的长度来解释。如果字符串是 8 或 14 个字符长,则假定年份由前 4 个字符给出。否则,年份由前 2 个字符给出。对于字符串中出现的多个部分,字符串以从左到右的顺序被解释,以找出年、月、日、时、分和秒值。这就意味着,你不就使用少于 6 个字符的字符串。例如,如果指定 ''''9903'''' ,你可能认为它代表 1999年3月,但你将会发现MySQL 会将一个“零”值插入到你的表中。这是因为,年份和月份分别为 9903,但是日期部分丢失(为 0),因此这个值是不合法的。

TIMESTAMP 列总是以完全精度存储给定的合法值,而不考虑显示尺寸的大小。这包含几个含义:

教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台