2010-02-07 10 views
5

responsabilidad: Este podría ser un duplicado de datetime vs. timestamp?, pero siento que no estoy convencido de las respuestas:¿Cuáles son buenas razones para elegir TIMESTAMP sobre las columnas DATETIME en MySQL?

Mi pregunta es:
¿Cuáles son las buenas razones para elegir TIMESTAMP sobre columnas DATETIME en MySQL?

Estoy bastante seguro de que no sé todo lo que hay sobre las diferencias entre los dos, así que voy a tratar de enumerar las principales ventajas de DATETIME (DT) en comparación con marca de tiempo (TS) que yo sepa:

  • DT es legible por humanos (TS no es sin utilizar TO_DATE)
  • DT tiene un intervalo de tiempo possble de 8999 años (1000-01-01 00:00:00 a 9999-12-31 23:59:59)
    (TS sólo cerca de 68 años 1970-01-01 a 2038-01-19)
  • DT campos parecen funcionar mejor (según this blog post)
  • DT se puede utilizar para el cálculo de la fecha avanzada (SELECT NOW() + INTERVAL 2 DAY)

Y viceversa:

  • TS solo necesita 4 bytes (DT utiliza 8)
  • TS se almacenan como valores UTC y cambia de acuerdo con la configuración
  • TS columnas puede servir como un "log" para la vigilancia cuando una fila tiene cambios

la única razón que veo para usarlo luego la zona horaria del cliente Sería la supervisión de filas, pero mirando el rango de TIMESTAMP, que terminará en "solo" 28 años *, prefiero ir con un disparador de inserción o actualización.

Entonces, ¿qué es lo que me falta? Todavía no veo un realmente bueno razón para elegir la marca de tiempo para cualquier propósito?

* Lo sé, esto es parece bastante largo, pero en los años 60 algunos ingenieros también decidió afeitarse 2 bytes del campo de año, debido a que sus sistemas informáticos nunca sería plazo hasta el año 2000 ... ..

Respuesta

2

Las columnas DT también pueden servir como un "registro" para monitorear cuando una fila cambia, los uso y desencadena para hacer eso.

Normalmente utilizo la marca de tiempo cuando trabajo con muchas cosas de PHP para reducir demasiado el análisis de la fecha. Si alguna vez surge la necesidad, puedo actualizar mi software para usar datetime.

1

Aquí hay un aspecto divertido de DT que ya utilicé: Al usar DT, al menos en MySQL, tiene la opción de dejar el año en "0000" y/o en ambos meses y días: "00-00 ". ¡Esto es útil para guardar las fechas de cumpleaños sin requerir información completa!

+1

Verdadero; sin embargo, no es práctico si luego necesita copiar/migrar datos a un DBMS diferente que requiere que los campos de fecha realmente contengan fechas (reales). He estado allí, hecho eso ... – sleske

2

La pregunta principal es: ¿cuál es el propósito del campo de fecha/hora y marca de tiempo? Si solo es una marca de tiempo como en un archivo de registro donde solo almacena el tiempo real, el timestam es la mejor opción. Porque solo necesita 4 bytes y estamos en el alcance de lo que la marca de tiempo puede cubrir. Si se trata de una fecha como la fecha de nacimiento, la fecha es la mejor opción. Esperamos tener una solución antes del final del alcance de la marca de tiempo. ;) (Lo siento por mi ingles).

+1

Estoy de acuerdo con el almacenamiento requerido, pero la ganancia de velocidad al usar DATETIME parece superar esto, especialmente cuando estás buscando un evento en una fecha específica. –

+1

'Esperamos tener una solución antes del final del alcance de la marca de tiempo'. Supongo que tendremos un buen discurso mediático alrededor de mediados de enero de 2038 :-). –

Cuestiones relacionadas