对于我的表admin_tool_functionality
日期时间字段溢出,如果日期> '9999-12-31 23:59:59.4'
CREATE TABLE admin_tool_functionality (
id BIGINT NOT NULL AUTO_INCREMENT,
admin_tool_functionality_type_id BIGINT NOT NULL,
CONSTRAINT fk__admin_tool_functionality__admin_tool_functionality_type
FOREIGN KEY (admin_tool_functionality_type_id)
REFERENCES admin_tool_functionality_type(id),
PRIMARY KEY (id, admin_tool_functionality_type_id),
price FLOAT NOT NULL,
valid_from_day DATETIME NOT NULL,
valid_until_day DATETIME NOT NULL,
CHECK(valid_from_day < valid_until_day)
);
这种插入正常工作:
INSERT INTO admin_tool_functionality
(admin_tool_functionality_type_id, price, valid_from_day, valid_until_day)
VALUES
(1, 13.37, '2016-01-01', '9999-12-31 23:59:59.4');
但任何价值超过啤酒'9999-12-31 23:59:59.4'
失败:
INSERT INTO admin_tool_functionality
(admin_tool_functionality_type_id, price, valid_from_day, valid_until_day)
VALUES
(1, 13.37, '2016-01-01', '9999-12-31 23:59:59.5');
给予我:
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Datetime function: datetime field overflow
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3964)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)
at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:839)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:739)
的范围
DATETIME
值是'1000-01-01 00:00:00.000000'
到'9999-12-31 23:59:59.999999'
为什么会出现这个错误?
时区,也许?这似乎是一个奇怪的边缘情况下关心... – ceejayoz