⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 06-2.html

📁 MySQL4.1.0 中文参考手册
💻 HTML
📖 第 1 页 / 共 5 页
字号:
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 中测试
</PRE>
<tt>示例结束(译者注)</tt>
<p></P>

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

<P>
MySQL 检索与显示 <CODE>TIMESTAMP</CODE> 值的格式取决于它的显示尺寸,描述如下表。“完整”的 <CODE>TIMESTAMP</CODE> 格式是 14 位的,但是 <CODE>TIMESTAMP</CODE> 列可以以一个更短的显示尺寸建立:
</P>
<TABLE BORDER WIDTH="100%">
<TR><TD><STRONG>列类型 </STRONG> </TD><TD> <STRONG>显示格式 </STRONG>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(14)</CODE> </TD><TD> <CODE>YYYYMMDDHHMMSS</CODE>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(12)</CODE> </TD><TD> <CODE>YYMMDDHHMMSS</CODE>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(10)</CODE> </TD><TD> <CODE>YYMMDDHHMM</CODE>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(8)</CODE> </TD><TD> <CODE>YYYYMMDD</CODE>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(6)</CODE> </TD><TD> <CODE>YYMMDD</CODE>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(4)</CODE> </TD><TD> <CODE>YYMM</CODE>
</TD></TR>
<TR><TD><CODE>TIMESTAMP(2)</CODE> </TD><TD> <CODE>YY</CODE>
</TD></TR>
</TABLE>

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

<P>
<tt>例如(译者注):</tt>
<TABLE BORDER WIDTH="50%">
<TR><TD><STRONG><tt>字段定义 </tt></STRONG></TD><TD><STRONG><tt>强制字段长度 </tt></STRONG></TD></TR>  
<TR><TD><tt>TIMESTAMP(0) </tt></TD><TD><tt>TIMESTAMP(14) </tt></TD></TR>  
<TR><TD><tt>TIMESTAMP(15) </tt></TD><TD><tt>TIMESTAMP(14) </tt></TD></TR>  
<TR><TD><tt>TIMESTAMP(1) </tt></TD><TD><tt>TIMESTAMP(2) </tt></TD></TR>  
<TR><TD><tt>TIMESTAMP(5) </tt></TD><TD><tt>TIMESTAMP(6) </tt></TD></TR>
</TABLE>

<p></P>

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

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

<P>
你可以使用常用的格式集中的任何一个指定 <CODE>DATETIME</CODE>、<CODE>DATE</CODE> 和 <CODE>TIMESTAMP</CODE> 值:
</P>

<UL>
<LI>
一个 <CODE>'YYYY-MM-DD HH:MM:SS'</CODE> 或 <CODE>'YY-MM-DD HH:MM:SS'</CODE> 格式的字符串。一个“宽松”的语法是被允许的:以任何标点符号作为日期部分和时间部分中的定界符。例如,<CODE>'98-12-31 11:30:45'</CODE>、<CODE>'98.12.31 1+30+45'</CODE>、<CODE>'98/12/31 11*30*45'</CODE> 和 <CODE>'98@12@31 11^30^45'</CODE> 均是等价的。

<LI>
一个 <CODE>'YYYY-MM-DD'</CODE> 或 <CODE>'YY-MM-DD'</CODE> 格式的字符串。这里,一个“宽松”的语法同样也是被允许的:例如,<CODE>'98.12.31'</CODE>、<CODE>'98-12-31'</CODE>、<CODE>'98/12/31'</CODE> 和 <CODE>'98@12@31'</CODE> 是等价的。

<LI>
一个无定界符的 <CODE>'YYYYMMDDHHMMSS'</CODE> 或 <CODE>'YYMMDDHHMMSS'</CODE> 格式的字符串,只要字符串看起来像是一个日期。例如,<CODE>'19970523091528'</CODE> 和 <CODE>'970523091528'</CODE> 均被解释为 <CODE>'1997-05-23 09:15:28'</CODE>,但是 <CODE>'971122129015'</CODE> 却是违法的(它的分部分是无意义的),该值被插入时将变成 <CODE>'0000-00-00 00:00:00'</CODE>。

<LI>
一个无定界符的 <CODE>'YYYYMMDD'</CODE> 或 <CODE>'YYMMDD'</CODE> 格式的字符串,只要字符串看起来像是一个日期。例如,<CODE>'19970523'</CODE> 和 <CODE>'970523'</CODE> 被解释成为 <CODE>'1997-05-23'</CODE>,但是 <CODE>'971332'</CODE> 却是违法的(它的月和日部分是无意义的),该值被插入时将变成 <CODE>'0000-00-00'</CODE>。

<LI>
一个 <CODE>YYYYMMDDHHMMSS</CODE> 或 <CODE>YYMMDDHHMMSS</CODE> 格式的数字,只要数字看起来像是一个日期。例如,<CODE>19830905132800</CODE> 和 <CODE>830905132800</CODE> 被解释成为 <CODE>'1983-09-05 13:28:00'</CODE>。

<LI>
一个 <CODE>YYYYMMDD</CODE> 或 <CODE>YYMMDD</CODE> 格式的数字,只要数字看起来像是一个日期。例如,<CODE>19830905</CODE> 和 <CODE>830905</CODE> 被解释成为 <CODE>'1983-09-05'</CODE>。

<LI>
在一个 <CODE>DATETIME</CODE>、<CODE>DATE</CODE> 或 <CODE>TIMESTAMP</CODE> 语境中,一个函数的返回值将随之而变化,例如 <CODE>NOW()</CODE> 或 <CODE>CURRENT_DATE</CODE>。
</UL>

<P>
非法的 <CODE>DATETIME</CODE>、<CODE>DATE</CODE> 或 <CODE>TIMESTAMP</CODE> 值将会被转换到适当形式的“零”值(<CODE>'0000-00-00 00:00:00'</CODE>、<CODE>'0000-00-00'</CODE> 或 <CODE>00000000000000</CODE>)。
</P>

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

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

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

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

<UL>
<LI>
赋值时总是给出年、月和日,即使你的列类型定义为 <CODE>TIMESTAMP(4)</CODE> 或 <CODE>TIMESTAMP(2)</CODE>。否则,该值将是不合法的,而被 <CODE>0</CODE> 代替存储。

<P>
<tt>示例(译者注):</tt>
<PRE>
mysql&#62; CREATE TABLE `tA` (
    -&#62;   `id` int(3) unsigned NOT NULL auto_increment,
    -&#62;     `date1` timestamp(4) NOT NULL,
    -&#62;     PRIMARY KEY  (`id`)
    -&#62; ) TYPE=MyISAM;
Query OK, 0 rows affected (0.01 sec)

mysql&#62; INSERT INTO `tA` (`id`,`date1`)
    -&#62;  VALUES (1,NULL),  # 插入当前日期和时间
    -&#62;         (2,0305),  # 以数字格式给出值,而值长度小于 6 ,在最左边补 0 至 6 位数字
    -&#62;         (3,'0305');# 以字符串格式给出值,而值长不包括年、月和日,因而是一个非法值
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 1

mysql&#62; SELECT * FROM `tA`;
+----+-------+
| id | date1 |
+----+-------+
|  1 |  0305 |
|  2 |  0003 |
|  3 |  0000 |
+----+-------+
3 rows in set (0.00 sec)

* 以上结果在 MySQL 4.0.12 中测试
</PRE>
<tt>示例结束(译者注)</tt>
<p></P>

<LI>
如果以 <CODE>ALTER TABLE</CODE> 拓展一个 <CODE>TIMESTAMP</CODE> 窄列,以前被“隐蔽”的信息将被显示出来。

<P>
<tt>示例(译者注):</tt>
<PRE>
* 接上例结果

mysql&#62; ALTER TABLE `ta` CHANGE `date1` `date1` TIMESTAMP(11);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

# 设置 `date1` 为 TIMESTAMP(11),MySQL 会自动将其转化为 TIMESTAMP(11)

mysql&#62; SELECT * FROM `tA`;
+----+--------------+
| id | date1        |
+----+--------------+
|  1 | 030503150142 |
|  2 | 000305000000 |
|  3 | 000000000000 |
+----+--------------+
3 rows in set (0.00 sec)

* 以上结果在 MySQL 4.0.12 中测试
</PRE>
<tt>示例结束(译者注):</tt>
<p></P>

<LI>
同样的,缩小一个 <CODE>TIMESTAMP</CODE> 列的宽度不会引起信息的丢失,除了在感觉上值在被显示时显示了较少的信息。

<LI>
尽管 <CODE>TIMESTAMP</CODE> 列值是以全部精度存储的,但是 <CODE>UNIX_TIMESTAMP()</CODE> 是唯一能直接操作内部存储值的函数。其它的函数操作的是格式化后的检索的值。这就意味着不能够使用诸如 <CODE>HOUR()</CODE> 或 <CODE>SECOND()</CODE> 之类的函数,除非相关部分存在于格式化后的 <CODE>TIMESTAMP</CODE> 值中。例如,在小于 10 的显示格式上,为了使 <CODE>TIMESTAMP</CODE> 列中的 <CODE>HH</CODE> 部分能够显示,显示格式的尺寸必须不小于 10,因此在一个更短的 <CODE>TIMESTAMP</CODE> 列值上使用 <CODE>HOUR()</CODE> 将会产生一个无意义的结果。
<P>
<tt>示例(译者注):</tt>
<PRE>
* 接上例结果
# 下列示例结果与上述结果相悖
mysql&#62; ALTER TABLE `ta` CHANGE `date1` `date1` TIMESTAMP(4);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql&#62; SELECT * FROM `tA`;
+----+-------+
| id | date1 |
+----+-------+
|  1 |  0305 |
|  2 |  0003 |
|  3 |  0000 |
+----+-------+
3 rows in set (0.01 sec)

mysql&#62; SELECT HOUR(`date1`) FROM `tA`;
+---------------+
| Hour(`date1`) |
+---------------+
|            15 |
|             0 |
|          NULL |
+---------------+
3 rows in set (0.02 sec)

mysql&#62; SELECT SECOND(`date1`) FROM `tA`;
+-----------------+
| second(`date1`) |
+-----------------+
|              42 |
|               0 |
|            NULL |
+-----------------+
3 rows in set (0.01 sec)

* 以上结果在 MySQL 4.0.12 中测试
</PRE>
<tt>示例结束(译者注):</tt>
<p></P>

</UL>

<P>
在某种程序上,你可以将一个日期值赋给另一种日期类型的对象。然而,这可能会使值产生改变或丢失一部分信息。
</P>

<UL>
<LI>
如果将一个 <CODE>DATE</CODE> 值赋给一个 <CODE>DATETIME</CODE> 或 <CODE>TIMESTAMP</CODE> 对象,结果值的时间部分将被设为 <CODE>'00:00:00'</CODE>,因为 <CODE>DATE</CODE> 值不包含时间信息。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -