DATE 標準格式為 'YYYY-MM-DD'。UPDATE 與 WHERE 子句必須使用此格式。MySQL 在數值語境下自動雙向轉換日期與數字;比較時允許「寬鬆字串」:任意標點作分隔符('2004-08-15' = '2004#08#15'),甚至無分隔符('20040815'),前提是構成合法日期。
使用 <, <=, =, >=, >, BETWEEN 與常數字串比較 DATE/TIME/DATETIME/TIMESTAMP 時,MySQL 通常將字串轉為內部長整數以利快速比較(含寬鬆檢查)。例外情況(改為字串比較):
IN、STRCMP() 等其他比較方式。建議:假設字串比較為字串比較,比較時空值請用適當字串函數處理。
'0000-00-00'。MyODBC 2.50.12+ 自動轉為 NULL。ALLOW_INVALID_DATES:僅檢查日 1-31、月 1-12,適合 Web 應用分欄位收集日期。NO_ZERO_IN_DATE:啟用後日/月不可為 0。NO_ZERO_DATE:啟用後禁止 '0000-00-00'。'0000-00-00'。MySQL 傾向「存什麼取什麼」,日期驗證建議由應用層負責。SET sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE'。以下語句均正常工作:
INSERT INTO tbl (idate) VALUES (19970505), ('19970505'), ('97-05-05'), ('1997.05.05'), ('1997 05 05'), ('0000-00-00');
SELECT * FROM tbl WHERE idate >= '1997-05-05';
SELECT * FROM tbl WHERE idate >= 19970505;
SELECT MOD(idate,100) FROM tbl WHERE idate >= 19970505;
以下不工作(STRCMP 為字串函數,將欄位轉為 'YYYY-MM-DD' 格式比較,不會將 '20030505' 解析為日期):
SELECT * FROM tbl WHERE STRCMP(idate, '20030505') = 0;