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