【发布时间】:2016-08-25 20:04:46
【问题描述】:
在尝试将记录插入某个表时,我收到如下错误:
数据截断:不正确的日期时间值:第 1 行的列“deleted_at”的“0000-00-00 00:00:00”
四处搜索我发现以下问题很有见地:
- MySQL Incorrect datetime value: '0000-00-00 00:00:00'
- Data truncation: Incorrect datetime value: ''
- MySQL: Data truncation: Incorrect datetime value: '2006-10-01 02:22:44'
但由于以下原因,我无法采用这些答案中给出的任何解决方案:
- 使用提到的任何其他 JAR here 和 here(尽管这不是一个 maven 项目)不是一个选项。我必须使用同一个罐子。
- 除了“0000-00-00 00:00:00”字段
deleted_at之外,我不能使用任何其他内容。显然,有大量的检查工作。你看,最初不能设置 delete_at 日期(我会使用像is_deleted这样的标志。如果有更好的方法请告诉我)。 - 并且更改 MySQL 配置不是像 here 提到的选项。他很好地解释了这一点。我认为这是主要问题。
至于您遇到此问题的原因,很可能是您会话的 sql_mode 设置包含
NO_ZERO_DATES。
我(很遗憾)对这些事情没有太多控制权,因为我不是唯一一个从事这个项目的人。为了让您深入了解该项目,这就是我得到错误的方式。
他们不使用任何日志记录。希望你能得到照片。
因此,考虑到我所受的约束,除了上面给出的解决方案之外,还有其他方法可以插入“0000-00-00 00:00:00”(我希望可能在 JDBC 中使用某些东西)。
MySQL 服务器版本:5.7.12-0ubuntu1
【问题讨论】:
-
用 null 代替 '0000-00-00 00:00:00' 怎么样?这可能吗?
-
@chris579 已经考虑过了,但是这些人已经做了一个字符串比较来检查记录是否被删除。如果他们愿意更改代码或配置,就不会出现问题。
-
嗯,你说的是“这些家伙”,他们是关于什么的?知道我们在说什么会很有帮助。老实说,我很确定没有办法。看来您正在扩展其他人的代码。如果是这样,找到合适的解决方法将非常困难
-
我同意 chris579,似乎服务器配置不允许该值。如果您无法更改配置并且必须插入该值,那么您将陷入僵局。 “这些家伙”如何插入新记录?
-
@UrsinusTheStrong 哇,支持你的领导。好像真的很感慨。我希望你为这项工作赚钱,否则我会很快离开。顺便说一句,仍然想知道使用 gui 和 java 的公司/项目。因此切换到.net