2010-01-03 13 views
26

¿Cuál es el mejor tipo de campo para usar para timestamps unix?tipo de campo para timestamp unix

¿Será suficiente por un tiempo, int(10)?

+1

¿Qué base de datos está usted utilizando? ¿Y no usarías un tipo de datos de fecha y hora nativos? –

Respuesta

2

Para las marcas de tiempo, debe usar el tipo de campo TIMESTAMP o DATETIME.

+3

¿no se actualiza la marca de hora sql cada vez que actualiza/edita una fila? – Megaman

+4

Sin embargo, esto lo pone a merced de la base de datos y la capa de acceso para tipos de fecha y representaciones de cadenas, lo que puede dificultar la escritura de aplicaciones entre entornos. A menudo es más simple y más conveniente usar enteros simples cuyo comportamiento es totalmente predecible, donde no hay otros tipos de fecha en la base de datos con los cuales usted desea comparar. – bobince

+0

@Megaman: no. Timestamp es solo un tipo de datos, no tiene ningún comportamiento especial. – bobince

59

Unix time_t tiene 32 bits de ancho, o 64. Por lo tanto, int(8) o binary(8) es suficiente, al menos durante los próximos 293 mil millones de años.

+41

La mejor parte de esta respuesta es "al menos durante los próximos 293 mil millones de años". –

+2

Tenga en cuenta que 'int (8)' no siempre hace lo que esta respuesta sugiere que hace; [la respuesta de bobince tiene una explicación.] (http://stackoverflow.com/a/1993585/2014893) –

+0

Deja que otra persona se preocupe por Y293B –

12

El número en un tipo de datos MySQL INT(n) no especifica la cantidad de espacio de almacenamiento reservado, es un ancho de visualización solo para el formato. Como tal, un INT(10) es lo mismo que un simple INTEGER, es decir un número firmado de 32 bits.

Este es ciertamente un tipo de datos apropiado para una marca de tiempo Unix de 32 bits. Pero si quieres marcas de tiempo de 64 bits, no será suficiente; tendrías que usar un BIGINT.

1

Para la marca de tiempo Unix, puede usar fácilmente INT(4) UNSIGNED cuyo valor máximo es 4294967295. Es suficiente para almacenar los valores time() durante los próximos ~ 133 años. Si su aplicación dejará de funcionar debido a esto, estará muerto hace mucho tiempo;)

También puede intentar utilizar el tipo de datos TIMESTAMP, que es menos problemático y cuando desea convertirlo a la marca de tiempo Unix puede usar UNIX_TIMESTAMP () función.

ex.

SELECT UNIX_TIMESTAMP(col_timestamp) FROM tbl_name; 
Cuestiones relacionadas