【问题标题】:How are date values returned in mysql via php如何通过 php 在 mysql 中返回日期值
【发布时间】:2012-09-22 18:34:45
【问题描述】:

我有一个关于从 MySQL 返回的值的快速问题。

在我的一个表中,我有一列分配了date 数据类型。当信息插入数据库时​​,curdate()会自动执行以插入正确的日期。

也就是说,MySQL 承认该值是一个日期。我有一个 php 脚本可以提取该值并将其呈现给用户。现在,从 php 的角度来看,这个值是一个字符串吗?

我想做的是,如有必要,我应该说,使用拉取的值并将其插入新表中(例如:10/1/12 由 php 拉取然后插入到新表中)。如果是这种情况,我可以简单地将该值放入数据类型为date 的新表的列中吗?还是 MySQL 不会将其识别为日期?

感谢任何见解。

【问题讨论】:

  • 当您将日期插入 MySQL 时,它们 必须 是字符串。 MySQL 然后会将其转换为日期并存储,但该日期必须在YYYY-MM-DD 中。但在你这样做之前,你确定你需要这样做吗?您实际上是将重复的数据插入到另一个表中。而denormalization 通常也不好。
  • 我知道这一点。我从中提取日期的表是一个临时表——如果你愿意的话,是一个审计表——它具有动态创建和删除的关联行。它不会对数据库进行非规范化。作为评论很难解释。

标签: php mysql date sqldatatypes


【解决方案1】:

MySQL 没有原生日期的语法。相反,它使用默认日期格式自动将日期从字符串转换为字符串:

mysql> SELECT @@date_format, @@datetime_format;
+---------------+-------------------+
| @@date_format | @@datetime_format |
+---------------+-------------------+
| %Y-%m-%d      | %Y-%m-%d %H:%i:%s |
+---------------+-------------------+
1 row in set (0.00 sec)

... 其中格式代码是DATE_FORMAT() 函数文档中解释的格式代码。您始终可以自己控制演员阵容,例如:

也就是说,事实是太多工具依赖 @@date_format@@datetime_format 保持它们的出厂值,因此为整个系统更改它们可能会破坏很多东西。

PHP 扩展可以将日期列转换为DateTime 对象(您没有说您使用的是哪个对象),但目前没有内置的对象可以做到这一点,这很遗憾。

【讨论】:

    【解决方案2】:

    您可以使用 mySQL str_to_date() 将字符串转换为日期...因此您可以直接使用 mySQL 以日期格式 ("yyyy-MM-dd") 保存字符串,然后使用 mySQL 方法 str_to_date() 进行转换。HERE

    【讨论】:

      【解决方案3】:

      MySQL 足够聪明,可以将字符串转换为日期。该字符串应该可以是几乎任何标准格式,并且可以正确翻译。

      编辑:对不起,我错了。

      您可以使用 PHP 或 MySQL 日期解析函数来处理这个问题。在 PHP 中:

      date("Y-m-d", strtotime($row['myDateField']));
      

      以下是 strtotime 可以解释的有效日期字符串列表: http://www.php.net/manual/en/datetime.formats.date.php

      【讨论】:

      • 非常好 - 这就是我需要知道的。谢谢!
      • 你确定吗? MySQL 预计日期在YYYY-MM-DD,我非常怀疑您是否可以像您暗示的那样随便扔任何东西。抄送:@Mlagma
      • @NullUserException,对不起,你是对的。我有时会混淆我的 MS SQL 和 MySQL。我会更新我的答案...
      • @AdamPlocher IIRC MS SQL 也不是那么灵活,或者实际上更糟。您必须使用 insert into ... convert(DateTime,'date_string_here', format) 之类的东西,其中最后一个参数是您必须记住的模糊格式 ID。
      • @NullUserException 不要在这里离题太远,但这不是真的。 MS SQL 将自动尝试将您扔给它的任何 varchar/字符串转换为日期(如果插入或更新日期时间字段)。接受以下任何格式:linesofcode.net/snippets/45
      【解决方案4】:

      你可以使用这个方法 DateTime::createFromFormat

      http://www.php.net/manual/en/datetime.createfromformat.php

      【讨论】:

      • 这很有趣。我没有考虑到这一点。
      猜你喜欢
      • 2017-10-01
      • 2014-03-28
      • 2022-11-23
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多