obtener insertar hora fecha español desde actual php mysql datetime timestamp unsigned-integer

php - insertar - Usar TIMESTAMP de MySQL versus almacenar marcas de tiempo directamente



strtotime php español (3)

Argumentos para TIMESTAMP

  • Almacena datos implícitamente en la zona horaria GMT. No importa cuál sea tu zona horaria de sesión. Útil si necesita usar diferentes zonas horarias.
  • Puede tener columnas automáticas de marca de tiempo usando DEFAULT CURRENT_TIMESTAMP o ON UPDATE CURRENT_TIMESTAMP (una columna por tabla solo hasta MySQL 5.6.5)
  • Puede usar la función de fecha y hora para la comparación de fechas, adición, sustracción, búsqueda de rango, etc., sin la necesidad de utilizar la función FROM_UNIXTIME() - hará que sea más fácil escribir consultas que puedan usar índices
  • En PHP

    >> date(''Y-m-d h:i:s'',4294967295); ''1969-12-31 11:59:59''

    entonces el rango es de hecho el mismo

Cuando UNIX_TIMESTAMP () se utiliza en una columna TIMESTAMP, la función devuelve el valor interno de la marca de tiempo directamente, sin una conversión implícita de "cadena-a-marca de tiempo-Unix"

Estoy en un dilema sobre el ahorro de valores de fecha y hora en el formato TIMESTAMP de MySQL vs en un formato INT personalizado sin firma. Las principales consideraciones aquí son la velocidad de recuperación, los cálculos de rango apropiados en PHP y el formato ocasional en valores legibles por humanos.

El espacio de almacenamiento requerido para cada tipo y sus rangos:

DATETIME 8 bytes ''1000-01-01 00:00:00'' to ''9999-12-31 23:59:59'' TIMESTAMP 4 bytes ''1970-01-01 00:00:01'' UTC to ''2038-01-19 03:14:07'' UTC UNSIGNED INT 4 bytes (Maximum Value 4294967295)

No necesito el rango de DATETIME en absoluto. Estoy dividido entre TIMESTAMP y UNSIGNED INT.

Argumentos a favor de UNSIGNED INT:

  • Una marca de tiempo de UNIX de 4294967295 se convierte a Dom, 07 de febrero de 2106 06:28:15 GMT, que es más que TIMESTAMP y es suficiente para mí
  • Comparar estas marcas de tiempo directamente en PHP sería más rápido en lugar de convertir TIMESTAMPs a través de strtotime () y luego compararlas

La única ventaja que TIMESTAMP me daría es cuando estoy leyendo manualmente los valores de la tabla mysql y necesito ''verlos''.

¿Hay alguna razón convincente para usar TIMESTAMP y no una INT NO FIRMADA?


El único uso real para TIMESTAMP es cuando desea que ese campo se actualice automáticamente cuando se actualiza la fila (que es el comportamiento predeterminado para ese campo), o cuando los requisitos de almacenamiento de datos son tan estrictos que 4 bytes por fila realmente hacen una diferencia para tú.

Realmente la comparación debería ser entre DATETIME y UNSIGNED INT, y recomendaría DATETIME porque:

  • Puede usar las funciones de fecha / hora nativas de MySQL para seleccionar por rangos de fechas, etc.
  • Es trivialmente fácil seleccionar estas fechas como marcas de tiempo UNIX para formatear fácilmente en PHP: SELECT UNIX_TIMESTAMP(field) FROM table , no es necesario seleccionar el valor bruto y usar strtotime
  • Es más fácil leer y editar los campos en su base de datos directamente si es necesario (como usted señaló).
  • Sin limitaciones en el rango de fechas

El punto dos solo realmente elimina cualquier razón para almacenar en números enteros, en mi opinión.


Puede que esta no sea una respuesta "científica", pero siempre encuentro la manera en que MySql maneja la conversión, la aritmética, la comparación, etc. ... en columnas TIMESTAMP confusas. Una columna INT no firmada es mucho más directa y siempre sé qué esperar.

PS Quizás otra cosa a favor de la columna TIMESTAMP es su capacidad para establecerse automáticamente a la hora actual después de cada actualización o inserción, pero eso no es algo que no puede vivir sin él.