|
|
 |
 |
|
|
 |
|
MySQL数据库技术(08)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:2161 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
 4. 日期和时间列类型的属性没有专门针对日期和时间列类型的属性。通用属性NULL 和NOT NULL 可用于任意日期和时间类型。如果NULL 和NOT NULL 两者都不指定,则缺省值为N U L L。也可以用DEFA ULT 属性指定一个缺省值。如果不指定缺省值,将自动选择一个缺 省值。含有NULL 的列的缺省值为NULL 。否则,缺省值为该类型的“零”值。 5. 处理日期和时间列MySQL 可以理解各种格式的日期和时间值。D ATE 值可按后面的任何一种格式指定,其中包括串和数值形式。表2 - 1 3为每种日期和时间类型所允许的格式。两位数字的年度值的格式用“歧义年份值的解释”中所描述的规则来解释。对于有分隔 符的串格式,不一定非要用日期的“ -”符号和时间的“ :”符号来分隔,任何标点符号都可用作分隔符,因为值的解释取决于上下文,而不是取决于分隔符。例如,虽然时间一般是用分隔符“:”指定的,但MySQL 并不会在一个需要日期的上下文中将含有“ :”号的值理解成时间。此外,对于有分隔符的串格式,不需要为小于10 的月、日、小时、分钟或秒值指定两个数值。下列值是完全等同的:
 请注意,有前导零的值根据它们被指定为串或数有不同的解释。串“ 0 0 1 2 3 1”将视为一个六位数字的值并解释为D ATE 的“2 0 0 0 - 1 2 - 3 1”和D ATETIME 的“2000-12-31 00:00:00”。而数0 0 1 2 3 1被认为1 2 3 1,这样的解释就有问题了。这种情形最好使用串值,或者如果要使用数值的话,应该用完全限定的值(即, D ATE 用2 0 0 0 1 2 3 1,D ATETIME 用2 0 0 0 1 2 3 1 0 0 0 0)。通常,在D AT E、D ATETIME 和T I M E S TAMP 类型之间可以自由地赋值,但是应该记住以下一些限制: ■ 如果将D ATETIME 或T I M E S TAMP 值赋给D AT E,则时间部分被删除。 ■ 如果将D ATE 值赋给D ATETIME 或T I M E S TA M P,结果值的时间部分被设置为零。 ■ 各种类型具有不同的取值范围。T I M E S TAMP 的取值范围更受限制( 1970 到2 0 3 7),因此,比方说,不能将1970 年以前的DATETIME 值赋给T I M E S TAMP 并得到合理的结果。也不能将2037 以后的值赋给TIMES TAMP。MySQL 提供了许多处理日期和时间值的函数。要了解更详细的信息请参阅附录C。 6. 歧义年份值的理解 对于所有包括年份部分的日期和时间类型( DATE、DATE TIME、TIME STAMP、YEAR),MySQL将两位数字的年份转换为四位数字的年份。这个转换根据下列规则进行(在MySQL4.0 中,这些规则稍有改动,其中69 将转换为1969 而不是2069。这是根据X/Open UNIX 标准规定的规则作出的改动): ■ 00 到69 的年份值转换为2000 到2069。 ■ 70 到99 的年份值转换为1970 到1999。 通过将不同的两位数字值赋给一个YEAR 列然后进行检索,可很容易地看到这些规则的效果。下面是检索程序:
 请注意,00 转换为0000 而不是2 0 0 0。这是因为0 是YEAR 类型的一个完全合法的值;如果插入一个数值,得到的就是这个结果。要得到2 0 0 0,应该插入串“ 0”或“0 0”。可通过C O N C AT( ) 插入YEAR 值来保证MySQL 得到一个串而不是数。C O N C AT( ) 函数不管其参数是串或数值,都返回一个串结果。请记住,将两位数字的年份值转换为四位数字的年份值的规则只产生一种结果。在未给 定世纪的情况下,MySQL 没有办法肯定两位数字的年份的含义。如果MySQL 的转换规则不能得出您所希望的值,解决的方法很简单:即用四位数字输入年份值。MySQL 有千年虫问题吗?MySQL 自身是没有2000 年问题的,因为它在内部是按四位数年份存储日期值的,并且由用户负责提供恰当的日期值。两位数字年份解释的实际问题不是MySQL 带来的,而是由于有的人想省事,输入歧义数据所引起的问题。如果您愿意冒险,可以继续这样做。在您冒险的时候,MySQL 的猜测规则是可以使用的。但要意识到,很多时候您确实需要输入四位数字的年份。例如, p r e s i d e n t表列出了1700 年以来的美国总统,所以在此表中录入出生与死亡日期需要四位的年份值。这些列中的年份值跨了好几个世纪,因此,让MySQL 从两位数字的年份去猜测是哪个世纪是不可能的。
|
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|