Tengo un archivo que puede contener de 3 a 4 columnas de valores numéricos que están separados por comas. Los campos vacíos se definen con la excepción cuando se encuentran al final de la fila:MySQL carga valores NULL de datos CSV
1,2,3,4,5
1,2,3,,5
1,2,3
En la siguiente tabla se creó en MySQL:
+-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | one | int(1) | YES | | NULL | | | two | int(1) | YES | | NULL | | | three | int(1) | YES | | NULL | | | four | int(1) | YES | | NULL | | | five | int(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+
Estoy tratando de cargar los datos mediante el comando CARGA MySQL :
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
La tabla resultante:
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
El problema radica en el hecho de que cuando un campo está vacío en los datos brutos y no está definido, MySQL por alguna razón no usa el valor predeterminado de las columnas (que es NULO) y usa cero. NULL se usa correctamente cuando el campo falta por completo.
Lamentablemente, tengo que ser capaz de distinguir entre NULL y 0 en esta etapa por lo que cualquier ayuda sería apreciada.
Gracias S.
edición
la salida de SHOW ADVERTENCIAS:
+---------+------+--------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------+ | Warning | 1366 | Incorrect integer value: '' for column 'four' at row 2 | | Warning | 1261 | Row 3 doesn't contain data for all columns | | Warning | 1261 | Row 3 doesn't contain data for all columns | +---------+------+--------------------------------------------------------+
¿tiene un impacto en el rendimiento? – Blacksonic
Teóricamente, supongo, pero está todo en la memoria y solo contiene pequeñas cantidades de datos. por fila, por lo que imagino que sería infinitesimal, pero debe probarlo si cree que podría ser un problema. –
Me gusta mucho esta respuesta. Los usuarios pueden ver las cadenas vacías '''' cuando descargan un csv (usando 'IFNULL (Col, '')' en la consulta 'SELECT INTO OUTFILE') para excel, pero luego las cargas las aceptan como nulas frente a' \ N 'en la csv. ¡Gracias! – chrisan