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
?