Точность временных меток MySQL 8 в наносекундах

#mysql #datetime #timestamp #precision #arbitrary-precision

#mysql #datetime #временная метка #точность #произвольная точность

Вопрос:

Возможно ли сохранить в MySQL DATETIME или другой эквивалентный тип данных с точностью до наносекунд?

Согласно документации на доли секунды, мне кажется, что это невозможно (максимальная 6-значная субсекундная точность = 1 секунда использования), но, возможно, есть другой тип данных или функция, которые могут решить эту проблему?

Я хотел бы иметь возможность вычислять разницу между временными диапазонами с точностью до наносекунды и хотел бы избежать их хранения в INT и выполнения моей собственной математики.

Возможно, если MySQL вообще не поддерживает такую точность, я мог бы установить плагин / расширение, чтобы получить пользовательскую точность DATETIME, которую я мог бы установить в наносекундах (9 цифр после второй запятой)?

Если это невозможно, существует ли какая-либо СУБД, поддерживающая наносекундную точность? или, может быть, по крайней мере, NoSQL (с функцией для вычисления разницы во времени с точностью до nsec)?

Комментарии:

1. Я не знаю ни одной базы данных, точность которой была бы ниже микросекунды. Вероятно, вы здесь предоставлены сами себе. Даже Postgres останавливается при таком разрешении . Стоит отметить, что Postgres позволяет легко создавать пользовательские типы столбцов.

2. @tadman Ad. пользовательский тип столбца, можно ли реализовать некоторую математику под типом, например, 1usec = 1000nsec, но 1minute = 60 секунд, но 1 day = 24h и так далее. Мне не нужно реализовывать весь календарь, но разные базы. Я думаю, что максимальные значения diff не должны превышать дней или, возможно, даже часов и минимальных наносекунд. Может ли пользовательский тип состоять из разных баз, поэтому в течение nseconds после 999 значение переносится на 000, а usecond увеличивается на 1. и с минутами это происходит аналогичным образом, но после 59 min 1 min значение min переносится на 00, а часы равны 1?

3. Просто используйте 64-разрядное значение, выраженное в наносекундах. Этого должно хватить вам на 292 года с некоторой эпохи.

4. @tadman хорошая мысль! возможно ли получить 64-битное значение, размер которого при хранении на жестком диске регулируется в соответствии с его содержимым. или 64-битный val всегда будет занимать 64 бит накладные расходы на диске, даже если на нем хранится только 0 или 1?

5. Я не уверен, о чем вы спрашиваете. 64-разрядные значения по определению имеют длину 8 байт. Если вы действительно беспокоитесь о дополнительных байтах, возможно, вам нужно оценить, сколько данных вы сохраняете и какие у вас есть варианты хранения.