我不知道为什么,但是当我的数据库表中添加了新记录时,时间格式后跟一个句点和六个零。一个例子是
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支持微秒,所以理想情况下我想删除它,因为它使我的表看起来很乱。关于如何删除微秒的任何建议?
答案 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
及以上版本扩展了对TIME
,DATETIME
和TIMESTAMP
值的小数秒支持,最高可达微秒(6位数)精度。
要定义包含小数秒部分的列,请使用语法type_name(fsp)
,其中type_name
为TIME
,DATETIME
或TIMESTAMP
,并且fsp
是小数秒精度。
例如:
CREATE TABLE t1 ( t TIME(3), dt DATETIME(6) );
fsp
值(如果给定)必须在0
到6
的范围内。值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
test
。micro
更改microsec
microsec
DATETIME NULL;
在TIME
DATETIME
,TIMESTAMP
和MySQL5.6.4
值的小数秒支持
参考:http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html