Каков наилучший тип поля для временных меток unix?
Будет ли int(10) достаточно на некоторое время?
Ответ 1
Unix time_t - либо 32 бит, либо 64. Таким образом, int(8) или binary(8) достаточно, по крайней мере для следующие 293 миллиарда лет.
Ответ 2
Число в типе данных MySQL INT(n) не определяет, сколько зарезервировано место для хранения, это только ширина отображения только для форматирования. Поскольку такой INT(10) совпадает с простым INTEGER, то есть 32-разрядным подписанным числом.
Таким образом, это, безусловно, подходящий тип данных для 32-разрядной метки времени Unix. Но если вам нужны 64-битные временные метки, этого не будет достаточно; вам нужно будет использовать BIGINT.
Ответ 3
Для временных меток вы должны использовать тип поля TIMESTAMP или DATETIME.
Ответ 4
Для отметки времени Unix вы можете легко использовать INT(4) UNSIGNED, максимальное значение которого 4294967295. Это достаточно далеко, чтобы вы могли хранить значения time() для следующих ~ 133 лет. Если ваше приложение перестанет работать из-за этого, вы будете долго мертвы;)
Вы также можете использовать тип данных TIMESTAMP, что менее проблематично, и когда вы хотите преобразовать его в отметку времени Unix, вы можете использовать функцию UNIX_TIMESTAMP().
ех.
SELECT UNIX_TIMESTAMP(col_timestamp) FROM tbl_name;