2009-05-19 7 views
1

Nous avons un grand fichier texte délimité par des tabulations (environ 120 000 enregistrements, 50 Mo) que nous essayons de pousser dans MySQL en utilisant mysqlimport. Certains champs sont entre guillemets, d'autres non. Nous utilisons le commutateur fields-optionally-enclosed-by='\"', mais le problème est que certaines des valeurs de champ contiennent elles-mêmes des guillemets doubles (indiquant pouces), donc la valeur du champ délimité peut être quelque chose "ABCDEF19" ". sur la source du fichier, donc nous ne pouvons pas changer la mise en forme là-bas.J'ai essayé de supprimer le commutateur fields-optionally-enclosed-by, mais ensuite les guillemets qui entourent les valeurs sont importésmysqlimport et guillemets

il enregistre avec des guillemets dans les valeurs obtiennent Existe-t-il un moyen de dire à mysqlimport que certains champs sont éventuellement entourés de guillemets, mais peuvent contenir des guillemets? Nous avons pensé peut-être à une recherche globale et remplacer pour échapper les guillemets dans les valeurs de champs? suggestions?

Répondre

1

Vous pouvez l'importer avec les guillemets (le champ fields-optional-closed-by enlevé) et ensuite lancer une vérification où si la valeur a des guillemets doubles au début et à la fin (en supposant qu'aucune des valeurs n'a de pouce au début) puis tronquez d'un caractère au début et à la fin pour supprimer les citations supplémentaires que vous avez importées. EDIT: après avoir lu la réponse de kekoav Je dois admettre que si vous êtes capable de manipuler le fichier avant l'importation, ce serait une option beaucoup plus sage, mais si vous êtes obligé de supprimer des guillemets par la suite, vous pouvez utiliser quelque chose comme ceci:

UPDATE table 
SET column = 
IF(
STRCMP(LEFT(table.column,1),'"'), 
MID(table.column,2,(LENGTH(table.column)-2)), 
table.column 
) 

pour chaque « colonne » dans « table »

1

Si vos données sont compris citations à l'intérieur du corps de la citation de champ sans délimitation, vous avez en quelque sorte un problème. Vous ne pouvez pas garantir que mysqlimport le fera correctement.

Masser les données avant d'essayer de les insérer de cette manière. Heureusement, il est délimité par des tabulations, vous pouvez donc exécuter une expression régulière pour remplacer les guillemets par une version délimitée, puis indiquer à mysqlimport le délimiteur.

Questions connexes