Spec-Zone.ru › MariaDB

DATETIME

Синтаксис

DATETIME [(microsecond precision)]

Описание

Сочетание даты и времени.

MariaDB отображает значения в формате 'YYYY-MM-DD HH:MM:SS.ffffff', но позволяет присваивать значения столбцам типа DATETIME с использованием либо строк, либо чисел. Подробности см. в разделе о литералах дат и времени.

Столбцы DATETIME также принимают CURRENT_TIMESTAMP в качестве значения по умолчанию.

MariaDB 10.1.2 ввела опцию --mysql56-temporal-format, включенную по умолчанию, которая позволяет MariaDB хранить DATETIME в том же низкоуровневом формате, что и MySQL 5.6. Дополнительную информацию см. ниже в разделе Внутренний формат.

Требования к хранению см. в разделе о требованиях к хранению типов данных.

Поддерживаемые значения

MariaDB хранит значения типа DATETIME в формате, поддерживающем значения между 1000-01-01 00:00:00.000000 и 9999-12-31 23:59:59.999999.

MariaDB также может хранить микросекунды с точностью от 0 до 6. Если точность микросекунд не указана, по умолчанию используется 0.

MariaDB также поддерживает '0000-00-00' в качестве специального значения нулевой даты, если в SQL_MODE не указано NO_ZERO_DATE. Аналогично, отдельные компоненты даты могут быть установлены в 0 (например: '2015-00-12'), если в SQL_MODE не указано NO_ZERO_IN_DATE. Во многих случаях результат выражения, включающего нулевую дату или дату с нулевыми частями, равен NULL. Если включен SQL_MODE ALLOW_INVALID_DATES, то если день находится в диапазоне от 1 до 31, дата не вызывает ошибки, даже для месяцев с менее чем 31 днем.

Режим Oracle

MariaDB начиная с 10.3

В режиме Oracle в MariaDB 10.3, DATE со временем является синонимом DATETIME. См. также mariadb_schema.

Внутренний формат

В MariaDB 10.1.2 был представлен новый временной формат из MySQL 5.6, который изменяет, как работают столбцы TIME, DATETIME и TIMESTAMP на более низких уровнях. Эти изменения позволяют этим временным типам данных иметь дробные части и отрицательные значения. Вы можете отключить эту функцию, используя системную переменную mysql56_temporal_format.

Таблицы, которые содержат значения TIMESTAMP и были созданы в более старой версии MariaDB или при отключенной системной переменной mysql56_temporal_format, продолжают хранить данные с использованием более старого формата.

Для обновления столбцов таблиц со старого формата на новый выполните оператор ALTER TABLE... MODIFY COLUMN, который изменяет столбец на *тот же* тип данных. Эта операция может потребоваться, если вы хотите экспортировать табличное пространство таблицы и импортировать его на сервер, где mysql56_temporal_format=ON установлено (см. MDEV-15225).

Например, если у вас есть столбец DATETIME в вашей таблице:

SHOW VARIABLES LIKE 'mysql56_temporal_format';

+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| mysql56_temporal_format | ON    |
+-------------------------+-------+

ALTER TABLE example_table MODIFY ts_col DATETIME;

При выполнении MariaDB оператора ALTER TABLE она преобразует данные со старого временного формата в новый.

Если у вас несколько таблиц и столбцов с временными типами данных, которые вы хотите переключить на новый формат, убедитесь, что системная переменная включена, затем выполните дамп и восстановление с использованием mysqldump. Столбцы, использующие соответствующие временные типы данных, восстанавливаются с использованием нового временного формата.

Начиная с MariaDB 10.5.1 столбцы со старыми временными форматами помечаются комментарием /* mariadb-5.3 */ в выводе операторов SHOW CREATE TABLE, SHOW COLUMNS, DESCRIBE, а также в столбце COLUMN_TYPE таблицы INFORMATION_SCHEMA.COLUMNS.

SHOW CREATE TABLE mariadb5312_datetime\G
*************************** 1. row ***************************
       Table: mariadb5312_datetime
Create Table: CREATE TABLE `mariadb5312_datetime` (
  `dt0` datetime /* mariadb-5.3 */ DEFAULT NULL,
  `dt6` datetime(6) /* mariadb-5.3 */ DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Примеры

CREATE TABLE t1 (d DATETIME);

INSERT INTO t1 VALUES ("2011-03-11"), ("2012-04-19 13:08:22"),
 ("2013-07-18 13:44:22.123456");

SELECT * FROM t1;
+---------------------+
| d                   |
+---------------------+
| 2011-03-11 00:00:00 |
| 2012-04-19 13:08:22 |
| 2013-07-18 13:44:22 |
+---------------------+
CREATE TABLE t2 (d DATETIME(6));

INSERT INTO t2 VALUES ("2011-03-11"), ("2012-04-19 13:08:22"),
 ("2013-07-18 13:44:22.123456");

SELECT * FROM t2;
+----------------------------+
| d                          |
+----------------------------+
| 2011-03-11 00:00:00.000000 |
| 2012-04-19 13:08:22.000000 |
| 2013-07-18 13:44:22.123456 |
+----------------------------++

Строки, используемые в контексте datetime, автоматически преобразуются в datetime(6). Если вам нужна дата без секунд, используйте CONVERT(..,datetime).

SELECT CONVERT('2007-11-30 10:30:19',datetime);
+-----------------------------------------+
| CONVERT('2007-11-30 10:30:19',datetime) |
+-----------------------------------------+
| 2007-11-30 10:30:19                     |
+-----------------------------------------+

SELECT CONVERT('2007-11-30 10:30:19',datetime(6));
+--------------------------------------------+
| CONVERT('2007-11-30 10:30:19',datetime(6)) |
+--------------------------------------------+
| 2007-11-30 10:30:19.000000                 |
+--------------------------------------------+

См. также

  • Требования к хранению типов данных
  • CONVERT()
  • Режим Oracle в MariaDB 10.3
  • mariadb_schema квалификатор типа данных
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают позиции MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/datetime/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API