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

Php 为什么MySql将datetime微秒格式化为.000000?,php,mysql,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($reco

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

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不支持微秒,所以理想情况下我想删除它,因为它会使我的表看起来很乱。关于如何删除微秒的任何建议?

如果您关心返回的
datetime
值的格式,请使用
date\u format()

如果您确实希望数据库以特定格式返回值,请不要依赖于该数据库


至于“为什么”MySQL会这样做的问题。因为它可以。数据库可以随意返回日期和日期时间值。MySQL的创建者为包含小数秒的列选择了最通用的格式。关键的一点是,如果您想要一种特定的格式,您不应该依赖于此。MySQL在格式化日期和从字符串中读取日期方面具有出色的功能支持。

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


删除日期时间字段的长度。改变一些事情,比如:

更改表
test
micro
更改
microsec
microsec
DATETIME 无效

MySQL5.6.4


请参阅:

问题:

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)
为什么
MySql
datetime
微秒格式化为
.000000

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

文档所述内容

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)
MySQL 5.6.4
及更高版本扩展了对
时间
日期时间
时间戳
值的分数秒支持,精度高达微秒(6位)

要定义包含小数秒部分的列,请使用语法
type\u name(fsp)
,其中
type\u name
TIME
DATETIME
TIMESTAMP
,而
fsp
是小数秒精度

例如:

CREATE TABLE t1 ( t TIME(3), dt DATETIME(6) );
fsp
值(如果给定)必须在
0
6
的范围内。值
0
表示没有小数部分。如果省略,默认精度为
0
。(为了与以前的MySQL版本兼容,这与标准SQL默认值
6
不同。)

示例

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)

如何插入它们?给我们看看相关的代码。
我认为MySql不支持微秒
你认为错了。您的表列类型是什么?您应该从表定义中删除
分数秒部分
值。PHP代码没有问题。主要问题仍然存在。为什么MySql将
datetime
微秒格式化为
.000000