MySQL carga valores NULL de datos CSV
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 están al final de la fila:
1,2,3,4,5
1,2,3,,5
1,2,3
La siguiente tabla fue creada 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 con el comando MySQL LOAD:
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 sin procesar y no está definido, MySQL por alguna razón no usa el valor predeterminado de las columnas (que es NULL) y usa cero. NULL se usa correctamente cuando falta el campo por completo.
Desafortunadamente, tengo que poder distinguir entre NULL y 0 en esta etapa, por lo que agradecería cualquier ayuda.
Gracias S.
editar
La salida de SHOW WARNINGS:
+---------+------+--------------------------------------------------------+ | 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 | +---------+------+--------------------------------------------------------+