Export Fixed Length

J

JCB

Mitglied
Hallo,

ich habe ein Projekt bei dem ich täglich Text Dateien im und Exportieren muss. Bislang wupp ich das mit M$, will aber von da wech und versuch das bei MySql. Datenbank ist bereits aufgestezt. Importieren kann ich auch schon. Jetzt erwarten meine anderen Schnittstellen immer Fixed Legth Text. ich konnte bislang dahingehend nichts finden:hilfe2: . Kann mir mal jemand den weg zeigen? Vieleicht auch nur andeuten??

Oh Ja, Die Spalten in den Tabellen haben natürlich schon das richtige Längenformat.

Danke für einen Ansatz,

JCB
 
wie exportierst du denn?
und welches format genau erwartest du dir?
 
Moin,

das soll hauptsächlich ASCII mit Fester Feldlänge(aus den Vorgaben der MySQL-Tabelle) sein.

Womit ich jetzt exportiere? Ich dachte ich nutze die Shell und mysqldump. Aber leider kann mysqldump nur CSV oder SQL.

N Tipp?

Danke

JCB
 
hast du es schon damit probiert?
Code:
select * from table into outfile 'c:\\test.txt' fields terminated by '' lines terminated by '\r\n';
 
Hallo,

das mit SELECT ... INTO OUTFILE ist schon der richtige Weg. Ein SELECT * nützt jedoch herzlich wenig, da MySQL Strings grundsätzlich automatisch kürzt.

Du kannst jedoch Stringfunktionen verwenden. Wenn Du weißt, daß Du die Spalten a,b,c aus der Tabelle schema.x lesen willst und c ein VARCHAR der Länge 50 ist, dann kannst Du folgende Sytnax verwenden:

select a,b,rpad(c, 50, ' ') from schema.x into outfile ...;

Wenn Du die Länge nicht kennst, kannst Du ab MySQL 5.0 im informationschema danach suchen:

select a,b,rpad(c, (select CHARACTER_OCTET_LENGTH from INFORMATION_SCHEMA.COLUMNS where column_name='c' and table_schema='schema' and table_name='x'),' ') from schema.x into outfile ...;

Völlig abgefahren wird's, wenn Du nicht weißt, ob es eine CHAR-ähnlich Spalte ist oder nicht. Dann verwende für jede Spalte im Select folgende Funktion:

select if(@columnlength:=(select CHARACTER_OCTET_LENGTH from INFORMATION_SCHEMA.COLUMNS where column_name='c' and table_schema='schema' and table_name='x'), rpad(c, @columnlength, ' '), c), if(...), ... from schema.x into outfile ...

-Kuli
 
Kuli schrieb:
das mit SELECT ... INTO OUTFILE ist schon der richtige Weg. Ein SELECT * nützt jedoch herzlich wenig, da MySQL Strings grundsätzlich automatisch kürzt.
also bei mir wird nicht gekürzt wenn ich fields terminated by '' verwende
 
Yupp, ich wusste das wird spannend:
Weg nach ninguno: Meine MySQL kürzt zwar nicht, gibt aber auch nicht die richtige Länge aus. Wenn ich mich nicht verzählt habe, gibt sie das Feld als (feldlänge *3) aus. Also wenn Feld CHAR(10) dann kommen im txt CHAR(30) raus. Würd mich ja auch mal interessieren warum dat so is.

Weg nach Kuli: Hört sich sinnvoll an, leider kann ich diese tabelle SCHEMA.COLUMNS in der Datenbank nicht finden. Die Abfrage sollte ja lauten:

Code:
select column_name from INFORMATION_SCHEMA.COLUMNS where table_name = 'xy'

richtig?

Hmm, da steh ich nun wieder...

Aber trotz allem möchte ich mich schonmal für die Hilfe bedanken.

Gruß,

JCB

Update:

Nu wird das Lustig: RPAD ist ja eigentlich auch richtig, wenn ich die richtige Feldlänge weiss dann ist das ja auch einfach.

Code:
mysql> select rpad(uid,10,' ') , rpad(C_DU,9,' ') from Master_DB INTO OUTFILE 'data.txt' FIELDS terminated by '' lines terminated by '\n';
Sollte ja auch tun. tut aber nicht sondern macht genau das gleiche wie vorher Multiplizieren mal 3.



Update: Ich hoffe ich hab mich jetzt nicht als DAUSER geoutet:

Die Felder waren alle in UTF8 erstellt worden. CHAR(10)*UTF8 =n bischen viel :)

Umformatiert dann klappts auch nach ningunos Tipp. RPAD ist aber auch der Hammer Tipp, damit kann ich meine unförmigen Felder anpassen.

Ich hoffe, ich darf noch mitmachen.

Danke für den Weg und das Ziel.


JCB
 
Zuletzt bearbeitet:
JCB schrieb:
Ich hoffe, ich darf noch mitmachen.
Aber natürlich! :headup: :D

Daß die Feldlänge bei fields terminated by ... erhalten bleibt, wußte ich selbst noch nicht. Daß dabei die echte Byte-Länge genommen wird, ist aber auch wieder recht beschrubbt.

MySQL ist eigentlich eine geile Datenbankengine, aber macht manchmal sehr seltsame Dinge, die völlig unsinnig sind und die sich keiner erklären kann, und die man auch mit den Millionen von Laufzeitparametern nicht recht abstellen kann.

Übrigens, dieses INFORMAION_SCHEMA ist ein eigenes Schema, das seit MySQL 5.0 existiert. Sollte bei dir also drin sein, wenn Du die aktuelle Version nutzt.

-Kuli
 

Ähnliche Themen

Text(Fixed Length) in MySql importieren

Zurück
Oben