Pregunta

Estoy intentando importar un archivo .csv en una tabla MySQL a través de phpMyAdmin .

El archivo .csv está separado por tuberías, formateadas así:

data|d'ata|d'a"ta|dat"a|
data|"da"ta|data|da't'a|
dat'a|data|da"ta"|da'ta|

Los datos contienen comillas. No tengo control sobre el formato en el que recibo los datos: los genera un tercero.

El problema surge cuando hay un | seguido de una comilla doble . Siempre obtengo un & Quot; recuento de campo no válido en la entrada CSV en la línea N & Quot; error.

Estoy cargando el archivo desde la página de importación, usando Latin1, CSV, terminado por |, separado por " ;.

Me gustaría simplemente cambiar " encerrado por " carácter , pero sigo obteniendo " Parámetro no válido para la importación CSV: campos encerrados por " . He probado varios personajes sin éxito.

¿Cómo puedo decirle a MySQL que acepte este formato en phpMyAdmin?

Configurar estas tablas es el primer paso para escribir un programa que utilizará archivos .csv gzipped cargados para mantener el catálogo de un sitio de comercio electrónico.

¿Fue útil?

Solución

He tenido un problema similar durante las últimas horas y finalmente conseguí una importación para trabajar, así que compartiré mi solución, aunque puede que no sirva para el póster original.

Versión corta:
1.) si es un archivo de Excel, guárdelo en formato ODS (hoja de cálculo de documento abierta). 1a.) Si el archivo tiene algún tipo de formato de texto con delimitadores (como tiene el póster original), abra Excel y, una vez dentro de Excel, use Archivo / Abrir para abrir el archivo. Allí podrá seleccionar el delimitador apropiado para ver el archivo. Asegúrese de que el archivo se vea bien, LUEGO guárdelo como formato ODS (y cierre el archivo).

2.) Abra el archivo en OpenOffice Calc (descarga gratuita de Oracle / Sun). 2a.) Presione Ctrl-F para abrir el cuadro de diálogo Buscar. Haga clic en Más opciones y asegúrese de que & Quot; Selección actual solamente & Quot; NO está marcado 2b.) Busca comillas dobles. Si no hay ninguno en su archivo, puede omitir los pasos 4 y 5.
3.) Guardar como - & Gt; Texto CSV. Seleccione las opciones para el formato UTF-8 (presione & Quot; u & Quot; 3 veces para llegar rápido), seleccione & Quot ;; & Quot; (punto y coma) como separador y seleccione comillas dobles para el texto. 4.) Si se encontraron comillas dobles en su archivo en el paso 2b, continúe, de lo contrario, simplemente importe el archivo como CSV con phpMyAdmin (consulte el paso 6). Deberia de funcionar. 5a.) Abrir en Word o cualquier otro editor de texto donde puede hacer Buscar - & Gt; Reemplazar todo.
5b.) Encuentre todas las instancias de tres comillas dobles seguidas buscando & Quot; & Quot; & Quot; (si encuentra alguno, es posible que incluso desee buscar 4, 5, 6, etc. seguidos hasta que aparezca vacío). 5c.) Sustituya & Quot; & Quot; & Quot; con un marcador de posición que no se encuentra en ningún otro lugar en su csv. Los reemplacé con 'abcdefg'. 5d.) Buscar - & Gt; Reemplace todas las instancias de & Quot; & Quot; (dos comillas dobles seguidas) con \ " (barra diagonal y comillas dobles). 5e.) Buscar - & Gt; Reemplace todas las instancias de abcdefg (o su marcador de posición elegido del paso 5c) con \ & Quot; & Quot ;. 5c y este paso aseguran que cualquier cita que ocurra al final de un campo justo antes de la cita delimitadora de texto se 'escape' correctamente. 5f.) Finalmente, guarde el archivo, manteniéndolo en UTF-8 (o cualquier formato que necesite para importar). 6.a) En phpMyAdmin, haga clic en & Quot; import & Quot; pestaña, haga clic en " elija el archivo " y seleccione el archivo que acaba de guardar. 6b.) Bajo 'Formato de archivo importado' CSV debe estar seleccionado. Si los nombres de columna están en la primera fila, asegúrese de que la casilla esté marcada. Lo más importante es que 'Campos terminados por' deben establecerse en; (punto y coma), 'Campos encerrados por' deben establecerse en " (comillas dobles), y 'Campos escapados por' deben establecerse en \ (barra diagonal). Lo configura en su archivo siguiendo el paso 3 y, si es necesario, siguiendo los pasos 5a - 5f.

7.) Haga clic en " Ir " y reza por que no hayas desperdiciado una hora más.

Ahora que la versión corta ha resultado ser tan larga, omitiré la versión larga.

Baste decir que parece haber 2 problemas principales con la importación a través de phpmyadmin. 1.) Hay algún tipo de problema de memoria que impide que se importen archivos grandes de Excel y ODS (¿de qué tamaño es grande? Todavía no estoy seguro). 2.) Ni OpenOffice ni Excel parecen guardar sus archivos csv de manera compatible con phpmyadmin. Quieren escapar de las comillas dobles con comillas dobles. phpMyAdmin quiere que las comillas dobles escapen con otra cosa, como la barra diagonal.

Con suerte, el primer problema se solucionará en una actualización de phpmyadmin (y / o el complemento de importación de Excel 'PHPExcel'). El segundo podría repararse si hubiera una manera fácil de cambiar el carácter de escape para los archivos Excel u ODS guardados como CSV, o si phpMyAdmin pudiera hacerse compatible con su formato (eso debería ser bastante fácil. Simplemente haga que realice lo mismo buscar-reemplazar acciones que realizamos manualmente arriba para evitar el problema de comillas dobles).

Espero que esto ayude a alguien,ya que pasé 3-4 horas descubriendo esta solución y otra hora escribiéndola aquí. Espero que no sea demasiado largo, pero esperaba ayudar a las personas en todos los niveles de experiencia desde cero hasta donde quiera que esté (probablemente alrededor de 0.1).

Otros consejos

Encontré un truco que funciona: uso $ como " encerrado por " personaje y todo esta bien. Como esto es para un sitio europeo, sé que nunca lo usarán en el contenido de la tabla.

puede modificar los archivos csv agregando un \ delante de cada '¿no?

¿Has intentado borrar los cuadros que dicen " Campos encerrados por " y " Campos escapados por " ;? No he usado phpMyAdmin, pero Google sugiere otros han tenido éxito con este método .

Puede considerar escribir su propio LOAD DATA INFILE , parece que necesitará una de todos modos ya que este proceso formará parte de una aplicación en algún momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top