J'essaie de charger un fichier où toutes les lignes utilisent les mêmes règles. (En supposant HEADER est une seule ligne)MySQL: comment charger des données avec un format de ligne fixe dans des variables utilisateur
HEADER1
HEADER2
.......
Mais malheureusement lorsque je tente d'utiliser l'instruction LOAD DATA INFILE Je reçois cette erreur: Code d'erreur: 1409 Impossible de charger la valeur de fichier avec une taille fixe lignes à la variable.
Voici le code que j'ai écrit:
USE test;
DROP TABLE IF EXISTS EXAMPLE_H;
CREATE TABLE EXAMPLE_H(
ID CHAR(20),
SP CHAR(3),
IVA CHAR(11) PRIMARY KEY,
NLP CHAR(6),
DLP DATE,
DUVI DATE,
DELP CHAR(30),
FILLER CHAR(39),
VTLP CHAR(3),
FILL CHAR(49)
);
LOAD DATA INFILE 'BTILSP.TXT'
INTO TABLE test.EXAMPLE_H
FIELDS TERMINATED BY ''
LINES TERMINATED BY '\n'
(ID, SP, IVA, NLP, @var_date_one, @var_date_two, DELP, FILLER, VTLP, FILL)
SET DLP = str_to_date(@var_date_one, '%Y%m%d',
DUVI = str_to_date(@var_date_two, '%Y%m%d');
J'ai eu cette idée de lire le fond de this page (commentaire par Ramam Pullella), et j'ai trouvé le même expliqué sur certains sites, mais je ne peux pas comprendre pourquoi je reçois cette erreur. Si je n'utilise pas les variables @var_date_one et @var_date_two, et donc la fonction STR_TO_DATE, la date n'est pas rendue comme MySql a besoin - la date dans le fichier est quelque chose comme "20100701" - alors ce champ serait contenir tous les zéros ou une date différente de ce que j'attends. Si je change DLP et DUVI pour être représenté par CHAR (8), alors cela fonctionne, mais je n'utiliserai pas les comparaisons SQL DATE et les outils similaires.
Pouvez-vous m'aider s'il vous plaît? :) Merci beaucoup.
EDIT:
Il semble que le problème est donnée par la ligne TERMINATED BY « », étant donné que ce genre de ligne est une « ligne fixe (non délimité) ». Peut-être qu'il ne peut pas être assigné à une variable pour une raison inconnue, mais c'est ainsi que cela fonctionne. La documentation dit:
User variables cannot be used when loading data with fixed-row format because user variables do not have a display width.
Toute suggestion?
RE-EDIT: J'ai lu le commentaire de Ryan Neve au bas de cette page. Il donne une astuce pour lire une ligne fixe en variables:
LOAD DATA LOCAL INFILE '<file name>' INTO TABLE <table>
(@var1)
SET Date=str_to_date(SUBSTR(@var1,3,10),'%m/%d/%Y'),
Time=SUBSTR(@var1,14,8),
WindVelocity=SUBSTR(@var1,26,5),
WindDirection=SUBSTR(@var1,33,3),
WindCompass=SUBSTR(@var1,38,3),
WindNorth=SUBSTR(@var1,43,6),
WindEast=SUBSTR(@var1,51,6),
WindSamples=SUBSTR(@var1,61,4);
Pensez-vous que c'est une bonne façon de le faire? :)
Dans docs mentionné cela ne fonctionnera pas pour les données de format fixe de longueur. Le mieux est de re-réparer votre fichier d'insertion. Ou changez-le en varchar, et effectuez un casting de type plus tard. – ajreal
@ajreal: merci! Hier, je n'ai pas lu votre réponse, mais j'ai édité ma question et j'ai écrit quelque chose comme ce que vous avez dit :) – Markon