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
В режиме 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 квалификатор типа данных
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/datetime/