未插入日期 - 插入后显示 0000-00-00

Bus*_*ler 5 mysql mysql-5.5

我正在尝试将日期插入到 mysql 表中。我用来创建表的SQL查询如下:

CREATE TABLE IF NOT EXISTS DDD(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE, 
    datecolumn DATE NOT NULL , 
    open FLOAT, 
    high FLOAT, 
    low FLOAT, 
    close FLOAT, 
    volume INT)
Run Code Online (Sandbox Code Playgroud)

我正在使用以下 SQL 语句插入数据:

INSERT INTO DDD(datecolumn, open, high, low, close, volume)
VALUES(2011-05-26, 12.09, 13.31, 12.05, 13.09, 1293441)
Run Code Online (Sandbox Code Playgroud)

之后,当我选择并查看数据时,日期列中的条目是

0000-00-00

我已经尝试了解决方案

将 CSV 导入 MySQL 表会将日期字段保留为 0000-00-00

...但它导致以下错误:

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'datecolumn DATE' at line 1
Run Code Online (Sandbox Code Playgroud)

在以下查询之后,

ALTER TABLE db.DDD MODIFY datecolumn datecolumn DATE;
Run Code Online (Sandbox Code Playgroud)

我是 SQL 的新手,现在正在学习。任何人都可以解释一下,我做错了什么?

Phi*_*lᵀᴹ 12

将日期放在引号中:

INSERT INTO DDD(datecolumn, open, high, low, close, volume) 
VALUES('2011-05-26', 12.09, 13.31, 12.05, 13.09, 1293441)
Run Code Online (Sandbox Code Playgroud)

MySQL 会默默地做一些数学运算 2011-05-26运算,并弄乱了它的内裤。

但它确实警告你:

mysql> insert into d VALUES(2011-05-26);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'datecolumn' at row 1 |
+---------+------+-----------------------------------------------------+
1 row in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

在不使用引号的情况下,MySQL 本质上是插入整数 1980(即2011 minus 05 minus 26)作为日期,因为它将其视为数学:

mysql> select 2011-05-26;
+------------+
| 2011-05-26 |
+------------+
|       1980 |
+------------+
1 row in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)