日期字段类型有限制' 1000-01-01' - ' 9999-12-31'
但为什么插入' 987-10-10'不是' 1000-01-01' ?
mysql> INSERT INTO DATE12(datas) VALUES('987-10-10');
Query OK, 1 row affected (0.03 sec)
mysql> SELECT * FROM DATE12;
+------+------------+
| id | datas |
+------+------------+
| NULL | 1987-11-04 |
| NULL | 0987-10-10 |
+------+------------+
2 rows in set (0.00 sec)
数据格式不正确
mysql> INSERT INTO DATE12(datas) VALUES('10001-13-12');
Query OK, 1 row affected, 1 warning (0.03 sec)
mysql> SELECT * FROM DATE12;
+------+------------+
| id | datas |
+------+------------+
| NULL | 1987-11-04 |
| NULL | 0987-10-10 |
| NULL | 0000-00-00 |
但对于时间类型所有好
mysql> INSERT INTO time1(t) VALUE('-1112:45:12');
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> SELECT * FROM time1;
+------+------------+
| id | t |
+------+------------+
| NULL | NULL |
| NULL | -12:45:12 |
| NULL | -838:59:59 |
+------+------------+
3 rows in set (0.00 sec)
mysql> INSERT INTO time1(t) VALUE('11112:45:12');
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> SELECT * FROM time1;
+------+------------+
| id | t |
+------+------------+
| NULL | NULL |
| NULL | -12:45:12 |
| NULL | -838:59:59 |
| NULL | 838:59:59 |
+------+------------+
4 rows in set (0.00 sec)
mysql>
答案 0 :(得分:2)
...为什么要加入内脏' 987-10-10'不是' 1000-01-01' ?
根据The DATE, DATETIME, and TIMESTAMP Types
的文件对于
DATE
和DATETIME
范围说明,“支持”表示尽管早期值可能有效,但无法保证。
意思是,'1000-01-01'
之前的日期也可以被接受,但不能保证
因此,在您的情况下,日期条目'987-10-10'
被接受,没有错误。
您声称未插入'1000-01-01'
。但你实际上试过了'10001-13-12'
即使您尝试使用'1000-13-12'
,它也会失败,因为'13'
部分的值'month'
意味着更少。
作为
'YYYYMMDD'
或'YYMMDD
'中没有分隔符的字符串格式,只要字符串作为日期有意义。例如,'20070523'
和'070523'
被解释为'2007-05-23'
,但'071332'
是非法的(它具有无意义的月和日部分)并变为'0000-00-00'
。
虽然在文档中没有看到,但上述声明对'YYYY-MM-DD'
等格式也有效。以下示例中显示了相同的内容:
mysql> insert into vdt(dt) values( '1001-13-32' );
ERROR 1292 (22007): Incorrect date value: '1001-13-32' for column 'dt' at row 1
mysql> select date_format( '2013-13-32', '%Y-%m-%d' ); show warnings;
+-----------------------------------------+
| date_format( '2013-13-32', '%Y-%m-%d' ) |
+-----------------------------------------+
| NULL |
+-----------------------------------------+
1 row in set, 1 warning (0.00 sec)
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2013-13-32' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql> select str_to_date( '20131232', '%Y%m%d' ); show warnings;
+-------------------------------------+
| str_to_date( '20131232', '%Y%m%d' ) |
+-------------------------------------+
| NULL |
+-------------------------------------+
1 row in set, 1 warning (0.00 sec)
+---------+------+---------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '20131232' for function str_to_date |
+---------+------+---------------------------------------------------------------+