Pregunta

He creado una columna como

`date_start` datetime NOT NULL DEFAULT '1970-01-01'

Sin embargo, cuando la carga de datos desde un archivo CSV con el comando LOAD DATA con una entrada en blanco para date_start el valor guardado es 0000-00-00 00:00:00?

¿Fue útil?

Solución

El modo SQL MySQL por defecto permite cero fechas.

Mi creencia es que el comando CARGA DE DATOS INFILE está leyendo la posición en blanco pretende ser una fecha y hora, y el uso de forma automática una fecha cero antes de la inserción. Esto explicaría por qué no se está aplicando su restricción predeterminada -. El valor no es null cuando se inserta

Creo que tienes dos opciones:

  1. Actualizar todos los espacios en blanco en su CSV desde "," a "null, 'o'," defecto, por lo que van a ser interpretados correctamente
  2. Cambiar el modo SQL : SET SQL_MODE='NO_ZERO_DATE'

Otros consejos

NULL y 'una entrada en blanco' no siempre se tratan de la misma en MySQL. En el caso del tipo de datos datetime, entradas en blanco se convierten automáticamente a 0000-00-00 00:00:00. Se puede pensar en esto como una forma de encasillamiento, en un espacio en blanco se pone a cero encasillado.

En el archivo de datos, intente reemplazar todas las fechas en blanco con la palabra clave DEFAULT.

datetime significa que su fecha de tiendas de columna y la hora en formato Y-m-d H:i:s (0000-00-00 00:00:00).

significa date sus tiendas de columna fecha solo en formato Y-m-d (0000-00-00).

Si no se especifica un valor cuando la inserción de datos, se utiliza el valor por defecto, pero cuando inserto los datos del archivo CSV sí especifica un valor para el campo, por lo que no se utiliza el valor por defecto.

Una entrada en blanco es un valor no válido para un campo de fecha y hora, por lo que se utiliza el valor 0000-00-00 00:00:00 en cambio, al igual que con cualquier valor que no se puede analizar a una fecha válida (o una fecha parcial).

MySQL tiene el comportamiento molesto (en mi opinión) que, bajo ciertas circunstancias, si se les da un valor no válido para almacenar en una columna, se almacenará un "valor de error" en lugar predefinido. Por ejemplo, en una fecha o de fecha y hora contexto, se almacenará la "fecha cero" usted ha notado; para una columna ENUM almacenará '' (corresponde a 0 en un contexto numérico) como un valor de error.

A pesar de que es poco elegante, puede intentar hacer la importación y permitiendo que las fechas no válidas cero para ser insertados, y luego emitir

UPDATE
    table_name
SET
    date_start = '1970-01-01 00:00:00'
WHERE
    date_start = '0000-00-00 00:00:00'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top