Nota: En antiguas versiones
          de MySQL (antes de la 4.1), las propiedades de las columnas
          TIMESTAMP difieren significativamente en
          muchas cosas de lo que se describe en esta sección. Si
          necesita convertir datos TIMESTAMP antiguos
          para que funcionen con MySQL 5.0, asegúrese de consultar
          Manual de referencia de MySQL 4.1 para más detalles.
        
          En MySQL 5.0, TIMESTAMP se muestran en el
          mismo formato que las columnas DATETIME. En
          otras palabras, el ancho de muestra se limita a 19 caracteres,
          y el formato es YYYY-MM-DD HH:MM:SS.
        
          El servidor MySQL puede ejecutarse en modo
          MAXDB . Cuando el servidor corre en este
          modo, TIMESTAMP es idéntico a
          DATETIME. Esto es, si el servidor está
          ejecutándose en modo MAXDB cuando se crea
          una tabla, las columnas TIMESTAMP se crean
          como columnas DATETIME . Como resultado,
          tales columnas usan el formato de salida de
          DATETIME, tienen el mismo rango de valores,
          y no hay inicialización automática o actualización de la
          fecha y hora actual.
        
          Para activar el modo MAXDB, cambie el modo
          SQL del servido aMAXDB cuando arranque
          usando la opción --sql-mode=MAXDB o
          cambiando en tiempo de ejecución la variable global
          sql_mode:
        
mysql> SET GLOBAL sql_mode=MAXDB;
          Un cliente puede hacer que el servidor se ejecute en modo
          MAXDB para sus propias conexiones como se
          muestra:
        
mysql> SET SESSION sql_mode=MAXDB;
          Desde MySQL 5.0.2, MySQL no acepta valores timestamp que
          incluyan cero en la columna de día o hora o valores que no
          sean fechas válidas. La única excepción es el valor
          especial '0000-00-00 00:00:00'.
        
          En MYSQL 5.0, tiene considerable flexibilidad para determinar
          cuando se actualiza e inicializa automáticamente
          TIMESTAMP y qué columna debe tener ese
          comportamiento:
        
Puede asignar la fecha y hora actual como el valor por defecto y el valor de actualización automático, como se hacía anteriormente. Pero es posible tener sólo uno u otro comportamiento automático, o ninguno de ellos. (No es posible tener un comportamiento para una columna y el otro para la otra columna.)
              Puede especificar qué columna
              TIMESTAMP inicializar o actualizar con
              la fecha y hora actuales. Ya no hace falta que sea la
              primera columna TIMESTAMP .
            
          Tenga en cuenta que la información en la siguiente discusión
          se aplica a columnas TIMESTAMP sólo para
          tablas no creadas con el modo MAXDB
          activado. (Como se menciona anteriormente, el modo
          MAXDB hace que las columnas se creen como
          columnas DATETIME .) Las reglas que
          gobiernan la inicialización y actualización de columnas
          TIMESTAMP en MySQL 5.0 son las siguientes:
        
              Si un valor DEFAULT se especifica para
              la primera columna TIMESTAMP en una
              tabla, no se ignora. El valor por defecto puede ser
              CURRENT_TIMESTAMP o una fecha y hora
              constante.
            
              DEFAULT NULL es lo mismo que
              DEFAULT CURRENT_TIMESTAMP para la
              primera columna
              TIMESTAMP. Para cualquier otra columna
              TIMESTAMP, DEFAULT
              NULL se trata como DEFAULT 0.
            
              Cualquier columna TIMESTAMP individual
              en una tabla puede actualizarse e inicializarse con la
              fecha y hora actual automáticamente.
            
              En un comando CREATE TABLE, la primera
              columna TIMESTAMP puede declararse de
              cualquiera de las siguientes formas:
            
                  Con las cláusulas DEFAULT
                  CURRENT_TIMESTAMP y ON UPDATE
                  CURRENT_TIMESTAMP, la columna tiene la fecha
                  y hora actual como su valor por defecto, y se
                  actualiza automáticamente.
                
                  Sin las cláusulas DEFAULT ni
                  ON UPDATE, es lo mismo que
                  DEFAULT CURRENT_TIMESTAMP ON UPDATE
                  CURRENT_TIMESTAMP.
                
                  Con la cláusula DEFAULT
                  CURRENT_TIMESTAMP y sin ON
                  UPDATE, la columna tiene la fecha y hora
                  actual como valor por defecto pero no se actualiza
                  automáticamente.
                
                  Sin cláusula DEFAULT y con
                  cláusula ON UPDATE
                  CURRENT_TIMESTAMP, la columna tiene por
                  defecto 0 y se actualiza automáticamente.
                
                  Con un valor constante DEFAULT, la
                  columna tiene el valor dado por defecto. Si la columna
                  tiene una cláusula ON UPDATE
                  CURRENT_TIMESTAMP se actualiza
                  automáticamente, de otro modo no lo hace.
                
              En otras palabras, puede usar la fecha y hora actuales
              para el valor inicial y el valor de actualización
              automática, o uno de ellos o ninguno. (Por ejemplo, puede
              especificar ON UPDATE para activar
              actualización automática sin tener la columna
              inicializada .)
            
              Cualquiera de CURRENT_TIMESTAMP,
              CURRENT_TIMESTAMP(), o
              NOW() puede usarse en las cláusulas
              DEFAULT y ON UPDATE
              . Todas tienen el mismo efecto.
            
              El orden de los dos atributos no importa. Si se
              especifican DEFAULT y ON
              UPDATE para una columna
              TIMESTAMP, cualquiera puede preceder al
              otro.
            
Ejemplo. Estos comandos son equivalentes:
CREATE TABLE t (ts TIMESTAMP); CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
              Para especificar el valor por defecto o actualización
              automática para una columna TIMESTAMP
              distinta a la primera, debe suprimir la actualización e
              inicialización automática de la primera columna
              TIMESTAMP asignándole explícitamente
              una valor constante DEFAULT (por
              ejemplo, DEFAULT 0 o DEFAULT
              '2003-01-01 00:00:00'). Luego, para la otra
              columna TIMESTAMP, las reglas son las
              mismas que para la misma columna
              TIMESTAMP, excepto que no puede omitir
              ambas cláusulas DEFAULT y ON
              UPDATE . Si lo hace, no habrá inicialización
              ni actualización automática.
            
Ejemplo, estos comandos son equivalentes:
CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                  ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                  DEFAULT CURRENT_TIMESTAMP);
          En MySQL 5.0, puede asignar la zona horaria actual para cada
          conexión, como se describe en
          Sección 5.9.8, “Soporte de zonas horarias en el servidor MySQL”. Los valores
          TIMESTAMP se almacenan en UTC,
          convirtiéndose desde la zona horaria actual para
          almacenamiento, y volviéndose a convertir a la zona horaria
          actual al mostrarse. Mientras la zona horaria permanezca
          constante, puede obtener el mismo valor que hay almacenado. Si
          almacena un valor TIMESTAMP, cambia la zona
          horaria y luego rescata el valor, es diferente que el valor
          almacenado. Esto ocurre porque no se usa la misma zona horaria
          para la conversión en ambas direcciones. La zona horaria
          actual está disponible en la variable de sistema
          time_zone.
        
          Puede incluir el atributo NULL en la
          definición de una columna TIMESTAMP para
          permitir que la columna contenga valores
          NULL . Por ejemplo:
        
CREATE TABLE t ( ts1 TIMESTAMP NULL DEFAULT NULL, ts2 TIMESTAMP NULL DEFAULT 0, ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP );
          Si el atributo NULL no se especifica,
          asignar el valor NULL a la columna resulta
          en que se almacena la hora y fecha actuales. Tenga en cuenta
          que una columna TIMESTAMP que permita
          valores NULL
          no no almacenará la fecha y
          hora actual a no ser que su valor por defecto se defina como
          CURRENT_TIMESTAMP,
          o NOW() o
          CURRENT_TIMESTAMP se inserte en la columna.
          En otras palabras, una columna TIMESTAMP
          definida como NULL se actualizará
          automáticamente sólo si se crea usando una definición como
          las siguientes:
        
CREATE TABLE t (ts NULL DEFAULT CURRENT_TIMESTAMP);
          De otro modo - esto es, si la columna
          TIMESTAMP se define usando
          NULL pero no usando DEFAULT
          TIMESTAMP, como se muestra aquí...
        
CREATE TABLE t1 (ts NULL DEFAULT NULL); CREATE TABLE t2 (ts NULL DEFAULT '0000-00-00 00:00:00');
...entonces debe insertar el valor explícitamente correspondiente a la fecha y hora actuales. Por ejemplo:
INSERT INTO t1 VALUES (NOW()); INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

