日期和时间类型是DATETIME
、DATE
、TIMESTAMP
、TIME
和YEAR
。这些的每一个都有合法值的一个范围,而“零”当你指定确实不合法的值时被使用。注意,MySQL允许你存储某个“不严格地”合法的日期值,例如1999-11-31
,原因我们认为它是应用程序的责任来处理日期检查,而不是SQL服务器。为了使日期检查更“快”,MySQL仅检查月份在0-12的范围,天在0-31的范围。上述范围这样被定义是因为MySQL允许你在一个DATE
或DATETIME
列中存储日期,这里的天或月是零。这对存储你不知道准确的日期的一个生日的应用程序来说是极其有用的,在这种情况下,你简单地存储日期象1999-00-00
或1999-01-00
。(当然你不能期望从函数如DATE_SUB()
或DATE_ADD()
得到类似以这些日期的正确值)。
当用日期和时间工作时,这里是的一些要记住的一般考虑:
- MySQL对一个给定的日期或时间类型以标准的格式检索,但是它试图为你提供的值解释成许多格式(例如,当你指定一个值被赋给或与比较一个日期或时间类型时),但是只支持有在下列小节描述的格式。期望你提供合法的值,并且如果你以其他格式使用这些值,可能造成无法预料的结果。
- 尽管MySQL试图以多种格式解释值,但它总是期望日期值的年份部分在最左面,日期必须以年-月-日的顺序给出(例如,
'98-09-04'
),而不是以其他地方常用的月-日-年或日-月-年的次序(例如,'09-04-98'
、'04-09-98')。 - 如果一个值在数字的上下文环境中被使用,MySQL自动变换一个日期或时间类型值到一个数字,反过来也如此。
- 当MySQL遇到一个日期或时间类型的值超出范围或对给类型不合法(见本节的开始)时,它将该类型的值变换到“零”值。(例外的是超出范围的
TIME
值被剪切为适当的TIME
范围端点值。)下表显示对每种类型的“零”值的格式:列类型 “零”值 DATETIME
'0000-00-00 00:00:00'
DATE
'0000-00-00'
TIMESTAMP
00000000000000
(长度取决于显示尺寸)TIME
'00:00:00'
YEAR
0000
- “零”值是特殊的,但是你能使用在表中显示的值来明显地存储或引用他们。你也可以使用值
'0'
或0
做到, 这更容易写。 - 在MyODBC 2.50.12和以上版本中,由MyODBC使用的“零”日期或时间值被自动变换到
NULL
,因为ODBC不能处理这样的值。