我很难创建一个简单的表:
CREATE TABLE `csat` (
`csat_id` INT NOT NULL AUTO_INCREMENT,
`value` INT,
`month` DATE NOT NULL,
PRIMARY KEY (`csat_id`)
);
CREATE TABLE `migrated` (
`migrated_id` INT NOT NULL AUTO_INCREMENT,
`title` INT,
`description` INT,
`month` DATE NOT NULL,
PRIMARY KEY (`migrated_id`)
);
INSERT INTO csat
VALUES (1, 1, 2017-06-15);
INSERT INTO migrated
VALUES (1, 2, 2018-06-15);
我得到了错误: 数据截断:错误的日期值:第1行的“月”列的日期为“ 1996”
看来我的约会日期格式正确: https://www.w3schools.com/sql/func_mysql_date.asp
我还想知道为什么我需要在csat_id上指定一个值,因为我认为SQL会因为它的主键而将它代入我。
答案 0 :(得分:3)
您必须将日期值用单引号引起来:'2017-06-15'
,而不是2017-06-15
。目前,MySQL将其评估为2017 minus 6 minus 15
,该字词出现在1996年。
此外,在插入时,最好指定要插入的列。而且,如果您将列设置为AUTO_INCREMENT
,则无需指定它:
INSERT INTO csat (`value`, `month`) VALUES (1, '2017-06-15');
我还将考虑更改您的列名。也许使“值”更具描述性(什么值?),month
却具有误导性,因为它实际上是一个日期类型的列。
答案 1 :(得分:1)
您尚未说出正在使用哪个数据库服务器,但是通常来说日期是作为字符串输入的。
您应该尝试以下插入内容;
INSERT INTO csat (`csat_id`, `value`, `month`)
VALUES (1, 1, '2017-06-15');
INSERT INTO migrated (`migrated_id`, `title`, `description`, `month`)
VALUES (1, 2, 2, '2018-06-15');
此外,您还应该指定要插入的列。这样可以防止将数据输入错误的字段,尤其是在发生架构更改时。
SQL会自动递增主键字段(如果以此方式定义)。但是,由于没有指定要插入的列,因此必须在insert语句中定义它。
试试看;
INSERT INTO csat (`value`, `month`)
VALUES (1, '2017-06-15');
INSERT INTO migrated (`title`, `description`, `month`)
VALUES (2, 2, '2018-06-15');
答案 2 :(得分:1)
我想您首先在日期中错过了单个qoutes(根据Sql标准),然后在插入时即使该列是自动增量的,也需要指定除autoincrement列之外的其他列,以确保您所需要的数据插入是否属于该特定列 试试这个
INSERT INTO
csat(value,month) values
(1,'2017-06-15')