Daten kopieren (blob to mediumtext)

hallo, ich bin leider kein profi im Bereich MySQL.
Ich habe folgendes Problem, ich habe eine Tabelle „tabele1“ (500 Datensätze) und eine „tabelle2“.

jetzt möchte ich ein paar felder (nicht alle) feld1, feld2, feld3 in tabelle2 einfügen und die restlichen felder in tabelle2 die nicht in tabelle1 vorhanden sind mit einer nummer versehen, die bleibt aber bei jedem datensatz gleich. Das wäre mein erstes Problem.

Mein 2. Problem in tabelle1 hat das Feld „feld1“ den typ „blob“ aber in der Zieltabelle im Feld „feld1“ MUSS dieses Feld vom Typ „mediumtext“ sein.

Kann mir dabei vl wer helfen, wäre sehr dankbar.

mfg
michael

Hi!

hallo, ich bin leider kein profi im Bereich MySQL.
Ich habe folgendes Problem, ich habe eine Tabelle „tabele1“
(500 Datensätze) und eine „tabelle2“.

jetzt möchte ich ein paar felder (nicht alle) feld1, feld2,
feld3 in tabelle2 einfügen und die restlichen felder in
tabelle2 die nicht in tabelle1 vorhanden sind mit einer nummer
versehen, die bleibt aber bei jedem datensatz gleich. Das wäre
mein erstes Problem.

Ein Feld der Tabelle2, das nicht versorgt wird, in der Definition auf „autoincrement“ setzen.

Dann per SQL die Daten aus Tabelle1 nach Tabelle2 bringen:

Insert into Tabelle2 Select Feld1, Feld2, Feld3, 0 from Tabelle1

Die 0 steht für das Feld, das auf autoincrement gesetzt wurde (Reihenfolge bzw. Position der Felder beachten!)

Wenn mehr Leerfelder in Tabelle2 enthalten sind, für jedes Feld den Defaultwert im SQL setzen, damit die Anzahl der Felder im Select-Teils der Anzahl der Felder in Tabelle2 entspricht.

Das SQL sieht dann etwa so aus für 7 Felder in Tabelle2:

Insert into Tabelle2 Select Feld1, Feld2, Feld3, 0, 0, 0, 0 from Tabelle1

Durch das Autoincrement wird nicht die 0 in das Feld geschrieben, sondern eine fortlaufende Zahl automatisch von der Datenbank generiert.

Danach ein Update über die Tabelle2 laufen lassen:

Update tabelle2 set feld5 = feld4, feld6 = feld4, feld7 = feld4

… wobei hier feld4 das Feld mit dem autoincrement ist.

Hier auf den Datentyp von feld5, feld6 und feld7 achten!

Mein 2. Problem in tabelle1 hat das Feld „feld1“ den typ
„blob“ aber in der Zieltabelle im Feld „feld1“ MUSS dieses
Feld vom Typ „mediumtext“ sein.

Kann mir dabei vl wer helfen, wäre sehr dankbar.

Auszug aus dem MySQL-Handbuch:

Ein BLOB ist ein binäres großes Objekt, welches eine variable Menge von Daten aufnehmen kann. Die vier BLOB-Typen sind TINYBLOB, BLOB, MEDIUMBLOB und LONGBLOB. Sie unterscheiden sich lediglich in der maximalen Länge der Werte, die sie aufnehmen können. Die vier TEXT-Typen sind TINYTEXT, TEXT, MEDIUMTEXT und LONGTEXT. Sie entsprechen den vier BLOB-Typen, d. h., sie haben dieselben Längenbeschränkungen und Speicheranforderungen.

Ein blob in ein mediumtext zu bringen, ist aus Gründen der Feldlängen überhaupt kein Problem!

Die Übertragung der Daten von einem blob in ein mediumtext geht also problemlos, da musst du nichts umformen. Aber macht das Sinn? Ein blob enthält Binärdaten, zum Beispiel die Daten einer Grafik (jpg, gif, o.ä.) Das willst du in ein Textfeld schieben? Du bekommst da nur wilden Krimskrams zu sehen. Mach mal im Windows Text-Editor eine GIF-Datei auf, dann siehst du, was du in das mediumtext-Feld schieben willst.

Grüße
Heinrich

Danke für deine Antwort.

Ein Feld der Tabelle2, das nicht versorgt wird, in der
Definition auf „autoincrement“ setzen.

Dann per SQL die Daten aus Tabelle1 nach Tabelle2 bringen:

Insert into Tabelle2 Select Feld1, Feld2, Feld3, 0 from
Tabelle1

Die 0 steht für das Feld, das auf autoincrement gesetzt wurde
(Reihenfolge bzw. Position der Felder beachten!)

Wenn mehr Leerfelder in Tabelle2 enthalten sind, für jedes
Feld den Defaultwert im SQL setzen, damit die Anzahl der
Felder im Select-Teils der Anzahl der Felder in Tabelle2
entspricht.

Das SQL sieht dann etwa so aus für 7 Felder in Tabelle2:

Insert into Tabelle2 Select Feld1, Feld2, Feld3, 0, 0, 0, 0
from Tabelle1

Durch das Autoincrement wird nicht die 0 in das Feld
geschrieben, sondern eine fortlaufende Zahl automatisch von
der Datenbank generiert.

Danach ein Update über die Tabelle2 laufen lassen:

Update tabelle2 set feld5 = feld4, feld6 = feld4, feld7 =
feld4

… wobei hier feld4 das Feld mit dem autoincrement ist.

Hier auf den Datentyp von feld5, feld6 und feld7 achten!

Die Übertragung der Daten von einem blob in ein mediumtext
geht also problemlos, da musst du nichts umformen. Aber macht
das Sinn? Ein blob enthält Binärdaten, zum Beispiel die Daten
einer Grafik (jpg, gif, o.ä.) Das willst du in ein Textfeld
schieben? Du bekommst da nur wilden Krimskrams zu sehen. Mach
mal im Windows Text-Editor eine GIF-Datei auf, dann siehst du,
was du in das mediumtext-Feld schieben willst.

ALso es sind in diesem Blob NUR Texte enthalten mit HTML-Tags.

Ich habe folgendes gemacht. Habe einen Dump der Tabelle gemacht (Ausgabe in Hex habe ich deaktiviert) raus kam tatsächlich der Text nur leider waren alle Umlaute durch ein Leerzeichen ersetzt. Habe dann diesen SQL Dump umgeschrieben und beim create statement statt blob einfach mediumtext genommen und dann wieder zurückgespielt, leider gingen auf diese Weise einige HTML-TAgs verloren.

ist durch deine Vorgehensweise sichergestellt, dass keine Bits und Bytes verloren gehen? Es geht nämlich darum, ich habe joomla laufen und möchte die beiträge von einer alten datenbank (kein joomla) nach joomla migrieren, damit ich nicht alle 500 datensätze per copy/paste im frontend von Joomla neu erstellen muss.

DAnke, lg michael