Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Fractional Seconds in Time Values

13.2.6 时间值中的小数秒

MySQL 对 TIMEDATETIMETIMESTAMP 值提供了高达微秒(6 位数字)精度的小数秒支持:

  • 要定义包含小数秒部分的列,请使用语法 type_name(fsp),其中 type_nameTIMEDATETIMETIMESTAMP,而 fsp 是小数秒精度。例如:

    CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

    如果给定,fsp 值必须在 0 到 6 之间。值为 0 表示没有小数部分。如果省略,默认精度为 0。(这与标准 SQL 的默认值 6 不同,以便与之前的 MySQL 版本兼容。)

  • TIMEDATETIMESTAMP 值插入到同类型但小数秒位少的列中将导致四舍五入。

    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 |
    +-------------+------------------------+------------------------+
  • 接受时间参数的函数也接受小数秒值。从时间函数返回的值包括小数秒部分,如适合。例如,NOW() 无参数返回当前日期和时间,没有小数部分,但可以接受从 0 到 6 的可选参数,以指定返回值包括小数秒部分的位数。

  • 时间文字语法产生时间值:DATE 'str'TIME 'str'TIMESTAMP 'str',以及 ODBC 语法等效项。结果值包括小数秒部分,如果指定。以前,时间类型关键字被忽略,这些构造产生字符串值。请参阅 标准 SQL 和 ODBC 日期和时间文字