为什么?

在这项计划中,我有:

`date_published` DATETIME NOT NULL,

但现在当我:

mysql> select min(date_published) from articles;
+---------------------+
| min(date_published) |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (5.47 sec)

但当我:

mysql> select * from articles where date_published = '0000-00-00 00:00:00';
ERROR 1525 (HY000): Incorrect DATETIME value: '0000-00-00 00:00:00'

我不明白.我是怎么插进go 的?

如何查找包含此日期的行?

Update

>>> db.execute("INSERT INTO articles (edition_id, url, date_published, title, weight) VALUES (%s, %s, %s, %s, %s)", (1, "", "0000-00-00 00:00:00", "", 0))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ... yadda yadda stack trace
packages/mysql/connector/connection.py", line 784, in _handle_result
    raise get_exception(packet)
mysql.connector.errors.DataError: 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'date_published' at row 1

我在MySQL客户端和代码中都try 过.当我测试它时,这两个似乎都不起作用,但该行在表中.

Update 2

在我的客户端为会话禁用NO_ZERO_DATE之后,我能够找到导致此问题的行.

它们被插入的日期是'0003-01-26 00:00:00+00:00'

现在,当我查询它时,我找到了它们,但如果0003:

mysql> select date_published from articles where date_published = '0003-01-26 00:00:00+00:00';
+---------------------+
| date_published      |
+---------------------+
| 0000-00-00 00:00:00 |
| 0000-00-00 00:00:00 |
| 0000-00-00 00:00:00 |
| 0000-00-00 00:00:00 |
+---------------------+
4 rows in set (5.41 sec)

+00:00很重要,否则我会得到一套空的.

推荐答案

您可能在过go MySQL Server配置允许的某个时间插入了零日期.

过go 默认允许日期为零,从MySQL 5.7开始,默认情况下不允许.这被认为是一种改进,因为0000-00-00不是有效的日期.也就是说,它不会出现在任何日历中.

决定是否允许这些日期的配置是SQL mode NO_ZERO_DATE.启用此模式时,将‘0000-00-00 00 00:00:00’转换为日期时间值的SQL表达式将返回错误.

如果该数据已经存储在您的表中,您至少可以获取它.但是您不能形成这样的新值,包括您在WHERE子句中使用的文字值.

要搜索该值,您必须至少在运行该查询的会话中临时更改您的sql_mode配置选项.我建议不要在全局改变它.不允许无效日期是一件好事.

手册上写道:

因为NO_ZERO_DATE已被弃用;预计它将在future 的MySQL版本中作为单独的模式名称被删除,并且其效果将包含在严格SQL模式的影响中.

因此,在MySQL某些future 版本中,您可能必须禁用严格模式才能访问这些日期值.我建议您现在将这些值替换为某个有效的DateTime值,否则为NULL.

Mysql相关问答推荐

MySQL查询获取图书的唯一读取页面数

MySQL没有使用S隐式附加到此二级索引的主键

MySQL::JSON列的添加使SELECT查询非性能(当需要临时表时)

MySQL 运行自动脚本

将 GORM 与自定义连接表和外键结合使用

如何从mysql中的不可用日期范围获取可用日期范围?

在 MYSQL 8 中的 JSON 字段上的 SELECT 中返回所有键及其数组项

无法从mysql数据库获取数据

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

MySQL如何将字符串列表与子查询进行比较

SQL从字典中的键获取值

无法通过迁移在现有表中插入行 - Rails 6

我将如何构建一个 SQL 查询来从交易表中 Select 第一次存款、第二次存款和额外存款

最好的 MySQL 性能调优工具?

我的 PDO 声明不起作用

如何从两个不同的日期获得年份差异?

在 WHERE 子句中使用 mysql concat()?

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

MySQL中的base64编码