微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 需要MySQL的JDBC解决方案错误的日期时间值错误

在尝试将记录插入某个表时,我收到如下错误

Data truncation: Incorrect datetime value: ‘0000-00-00 00:00:00’ for column ‘deleted_at’ at row 1

搜索我发现以下问题非常有见地:

> 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’

但由于以下原因,我不能采取这些答案中给出的任何解决方案:

>使用herehere中提到的任何其他JAR(虽然这不是maven项目)不是一种选择.我必须使用同一个罐子.
>对于字段deleted_at,我不能使用除“0000-00-00 00:00:00”之外的任何内容.显然,有一个针对此的检查.你看,最初,delete_at日期无法设置(我会使用像is_deleted这样的标志.如果有更好的方法请告诉我).
>改变MysqL配置不是像here那样的选项.他做了很好的解释.我认为这是主要问题.

As to why you are encountering the issue, it’s likely that the sql_mode setting for your session includes NO_ZERO_DATES.

我(遗憾地)对这些事情没有多少控制权,因为我不是唯一一个参与这个项目的人.为了让您了解该项目,这就是我收到错误方法.

enter image description here

他们不使用任何日志记录.希望你能得到这张照片.

所以,考虑到我所约束的约束,除了上面给出的解决方案之外,还有一种方法可以插入’0000-00-00 00:00:00′(我希望可能在JDBC中使用某些东西).

MysqL服务器版本:5.7.12-0ubuntu1

解决方法:

经过三天的辛劳,我终于找到了解决方案.

如此answer中所述,如果变量sql_mode设置为NO_ZERO_DATES,MysqL将不允许插入零日期.

As to why you are encountering the issue, it’s likely that the sql_mode setting for your session includes NO_ZERO_DATES.

现在,我可以通过在命令行中执行以下操作来清除变量sql_mode

SET GLOBAL sql_mode = '';

但如前所述,我不允许这样做.所以,我需要一个基于会话的解决方案.这是document本身给出的.

SET SESSION sql_mode = '';

所以,我在打开连接后添加了以下行.

try (Statement statementSet = connection.createStatement()) {
    statementSet.execute("SET SESSION sql_mode = ''");
}

它奏效了.我能够使用’0000-00-00 00:00:00’插入和更新datetime字段.这清除了仅针对当前会话的sql_mode变量.全局设置就是这样.

MysqL> SHOW VARIABLES LIKE 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

我不得不这样做,因为我别无选择.不建议这样做.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐