MySQL 8.0版本说明
MySQL 8.0源代码文档10bet官方网站
MySQL支持小数秒时间
,DATETIME
,时间戳
值,精确到微秒(6位数字):
要定义包含小数秒部分的列,请使用语法
,在那里type_name
(fsp
)type_name
是时间
,DATETIME
,或时间戳
,fsp
是分数秒精度。例如:CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
的
fsp
值,如果给定,则必须在0到6之间。值为0表示没有小数部分。如果省略,默认精度为0。(这不同于标准SQL默认的6,以与以前的MySQL版本兼容。)插入一个
时间
,日期
,或时间戳
值的小数秒部分转换为相同类型的列,但小数位数较少会导致舍入。考虑如下所示创建并填充一个表:CREATE TABLE fractest(c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2));INSERT INTO fractest VALUES ('17:51:04.777', '2018-09-08 17:51:04.777', '2018-09-08 17:51:04.777');
时态值被四舍五入地插入到表中:
mysql> SELECT * FROM fractest;+-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.78 | 2018-09-08 17:51:04.78 | 2018-09-08 17:51:04.78 | +-------------+------------------------+------------------------+
当发生这种舍入时,不会给出警告或错误。这种行为遵循SQL标准。
要插入具有截断功能的值,请启用
TIME_TRUNCATE_FRACTIONAL
SQL模式:SET @@sql_mode = sys。list_add (@@sql_mode TIME_TRUNCATE_FRACTIONAL);
启用SQL模式后,插入的时态值会被截断:
mysql> SELECT * FROM fractest;+-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.77 | 2018-09-08 17:51:04.77 | 2018-09-08 17:51:04.77 | +-------------+------------------------+------------------------+
接受临时实参的函数接受的值为小数秒。时间函数的返回值适当地包括小数秒。例如,
现在()
不带参数的返回当前日期和时间,不带小数部分,但接受从0到6的可选参数,以指定返回值包括小数秒部分。时态字面量的语法产生时态值:
日期的
,str
'时间”
,str
'时间戳的
,以及odbc语法的等价物。如果指定,结果值包括后面的小数秒部分。以前,时态类型关键字被忽略,这些构造产生字符串值。看到标准SQL和ODBC日期和时间文字str
'