为什么MySql将datetime微秒格式化为.000000?

时间:2014-03-24 11:27:02

标签: php mysql

我不知道为什么,但是当我的数据库表中添加了新记录时,时间格式后跟一个句点和六个零。一个例子是

2014-03-24 11:00:03.000000

我使用以下PHP代码获取日期和时间

date("Y-m-d H:i:s")

记录通过数组添加到数据库中,该数组通过以下函数传递:

$record = array(
'date' => date("Y-m-d H:i:s")
);

功能:

$data   = '`' . implode('`, `', array_keys($record)) . '`';
$values = '\'' . implode('\', \'', $record) . '\'';
mysql_query("
    INSERT INTO `". $table ."` ($data)
    VALUES (". $values .")
");

我不认为MySql支持微秒,所以理想情况下我想删除它,因为它使我的表看起来很乱。关于如何删除微秒的任何建议?

4 个答案:

答案 0 :(得分:1)

如果您在返回时关注datetime值的格式,请使用date_format()

select date_format(col, '%Y-%m-%d %H:%i;%s') as YYYYMMSS_HHMMSS

如果您真的希望以该格式使用,请不要依赖于以特定格式返回值的数据库。

关于“为什么”MySQL这样做的问题。因为它可以。数据库可以自由返回日期和日期时间值,但它喜欢。 MySQL的创建者为包含小数秒的列选择了最通用的格式。关键是如果你想要一个特定的格式,你不应该依赖于此。 MySQL为格式化日期和从字符串中读取日期提供了出色的功能支持。

答案 1 :(得分:1)

问题

  

为什么MySql格式datetime微秒为.000000

也许在定义日期时间字段时,您可能已经使用了微秒的精度。但是,在存储数据时,您没有输入微秒部分的值。

文档说明

MySQL 5.6.4 及以上版本扩展了对TIMEDATETIMETIMESTAMP值的小数秒支持,最高可达微秒(6位数)精度。

要定义包含小数秒部分的列,请使用语法type_name(fsp),其中type_nameTIMEDATETIMETIMESTAMP,并且fsp是小数秒精度。

例如:

CREATE TABLE t1 ( t TIME(3), dt DATETIME(6) );

fsp值(如果给定)必须在06的范围内。值0表示没有小数部分。如果省略,则默认精度为0。 (这与标准SQL默认值6不同,以便与以前的MySQL版本兼容。)

示例

mysql> create table msec( dt datetime, dtfs datetime(6) );
Query OK, 0 rows affected (0.38 sec)

mysql> insert into msec values ( now(), now() );
Query OK, 1 row affected (0.10 sec)

mysql> select * from msec;
+---------------------+----------------------------+
| dt                  | dtfs                       |
+---------------------+----------------------------+
| 2014-03-24 17:20:44 | 2014-03-24 17:20:44.000000 |
+---------------------+----------------------------+
1 row in set (0.00 sec)

mysql> insert into msec values ( now(), now() + interval 729524 microsecond );
mysql> insert into msec values ( now(), now() + interval 9524 microsecond );

mysql> select * from msec;
+---------------------+----------------------------+
| dt                  | dtfs                       |
+---------------------+----------------------------+
| 2014-03-24 17:20:44 | 2014-03-24 17:20:44.000000 |
| 2014-03-24 17:21:22 | 2014-03-24 17:21:22.729524 |
| 2014-03-24 17:22:45 | 2014-03-24 17:22:45.009524 |
+---------------------+----------------------------+
3 rows in set (0.00 sec)

答案 2 :(得分:0)

尝试将datetime列的数据类型修改为datetime(0):

ALTER TABLE tablename MODIFY datetimecolumnname DATETIME(0);

答案 3 :(得分:0)

删除提交日期时间的长度。改变一些事情:

  

ALTER TABLE testmicro更改microsec microsec DATETIME   NULL;

TIME

中引入了DATETIMETIMESTAMPMySQL5.6.4值的小数秒支持

参考:http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html