热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MariaDB数据库中的微秒

在MariaDB5.3和以后版本,时间,日期时间,和时间戳类型,随着时间函数,CAST和动态列,现在支持微秒。datetime列时间精度可以在创建表时指定的,例如:CREATETABLEexample(col_microsecDATETIME(6),col_millisecTIME(3));通常,任何时间,日期时间,或

在MariaDB 5.3和以后版本,时间,日期时间,和时间戳类型,随着时间函数, CAST和动态列,现在支持微秒。datetime列时间精度可以在创建表时指定的,例如:

CREATE TABLE example(

  col_microsec DATETIME(6),

  col_millisec TIME(3)

);

通常, 任何时间,日期时间,或时间戳列都指定精度,在类型名称后括号中。datetime精密指定小数点后面的数字,可以是任意整数数字从0到6。如果没有指定精度就是默认为0,为了向后兼容的原因。    

作为一个可以预期,一个日期精度可以指定。例如:
当存储过程声明的参数。  
当存储函数指定返回类型的。  
当声明变量。  
在CAST函数:

 create function example(x datetime(5)) returns time(4)

begin

  declare y timestamp(6);

 return cast(x as time(2));

end;

额外信息

一些额外的提示,没有特定的顺序:

SELECT CURTIME(4);

--> 10:11:12.3456
TIME_TO_SEC() 和 UNIX_TIMESTAMP()保存微秒的论点。这些函数将返回一个十进制数如果结果非零datetime精度和一个整数否则(向后兼容)。

SELECT TIME_TO_SEC('10:10:10.12345');

--> 36610.12345
当前版本的这个补丁修复一个bug在以下优化:在某些有DISTINCT查询,MariaDB可以忽略这一条款,如果它能证明所有结果行是独一无二的,例如,当一个主键是与一个常数。有时这种优化应用不正确,尽管——例如,当用一个日期常数比较字符串。现在被修复了。  
DATE_ADD()和DATE_SUB()函数现在可以把一个时间表达式作为参数(不只是DATETIME像以前一样)。

SELECT TIME('10:10:10') + INTERVAL 100 MICROSECOND;

--> 10:10:10.000100
mysql.general_log表的event_time字段和在mysql.slow_log 表的start_time, query_time, lock_time现在存储值使用微秒级精度。  
这个补丁修复一个bug当在使用BETWEEN操作符和其中的一个操作数是NULL下比较一个时间值。  
旧的语法的TIMESTAMP (N),其中N是显示宽度,不再支持。它在MySQL 4.1.0被弃用 (发布于2003-04-03)。  
当一个DATETIME值和一个时间值相比,后者被当作一个完整的DATETIME用零填充日期部分,类似于DATE比较DATETIME,或比较小数数字。在这种情况下MariaDB早期版本的用于比较这两个操作数都的部分。

注意:当你把一个时间值转化一个较小的精度值,它将被截断,不是取整。这样做是为了保证日期部分是没有改变。例如:

SELECT CAST('2009-12-31 23:59:59.998877' as DATETIME(3));

-> 2009-12-31 23:59:59.998


推荐阅读
author-avatar
宛如画中人需_308
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有