MEDIUMBLOB Feld stückchenweise füllen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MEDIUMBLOB Feld stückchenweise füllen

    Hallo,

    weil die Queries eine gewisse Längenbegrenzung haben (imho 1MB) wollte ich größere Datenmengen, die in MEDIUMBLOB (bis zu 16MB)-Felder eingefügt werden sollen, in 512kB Stückchen einfügen.

    Dazu habe Folgendes machen wollen (Pseudocode):
    Code:
    INSERT INTO dateien (inhalt) VALUES ('')
    MerkDirInsertID Als XY
    <WiederholSolangeBisKeineDatenMehrDa>
      UPDATE dateien SET inhalt=CONCAT(inhalt,<512kBBrockenDerDatei>) WHERE dateiid=XY
    <SchleifenEnde>
    Leider ist auch mit der Methode nach exakt 1MB Schluss, mit dem MySQL Query Browser stelle ich fest, dass die Felder alle 1MB lang sind und der Rest der Dateien abgeschnitten ist. CONCAT scheint also das erste Argument erst mal hervorzuholen, zu verknüpfen und dann neu einzutragen, sodass die Abfrage trotz des Aufwands nach dem 2. Einfügen 1MB übersteigt. Gibt es eine Alternative, die nur zu einem Feld etwas hinzufügt, ohne dass der bereits enthaltene Inhalt auf die Query-Länge angerechnet wird? Ich hab gelesen, dass LOADFILE eher nicht zu empfehlen wäre, weil das auf nicht ganz neuen MySQL Versionen nicht zur Verfügung stünde und auch Größenbeschränkungen unterliegt. :/

    Gruß und danke euch!
    cargu

  • #2
    Re: MEDIUMBLOB Feld stückchenweise füllen

    Original geschrieben von cargu
    CONCAT scheint also das erste Argument erst mal hervorzuholen, zu verknüpfen und dann neu einzutragen, sodass die Abfrage trotz des Aufwands nach dem 2. Einfügen 1MB übersteigt.
    Das BLOB-Feld wird vom MySQL-Server gepuffert. Dann wird konkateniert. Dabei steht dem Server nur max_allowed_packet (default 1MB) Speicher zur Verfügung. AFAIK gibt es keine Möglichkeit, BLOBs mit mehr Daten zu füllen, als max_allowed_packet zuläßt. Selbst mit LOAD_FILE() geht es nicht.
    Deine einzige Chance ist die Änderung von max_allowed_packet.

    Kommentar


    • #3
      Hallo,

      OK, danke, dann werd ich das mal in Angriff nehmen. Im "MySQL Administrator" hab ich die Einstellung schon mal gefunden (ist tatsächlich auf 1MB eingestellt) und werd jetzt mal googlen, wie ich den ändern kann. Im "MySQL Administrator" kann man sich die Werte nämlich nur angucken. Danke für den Hinweis!

      Gruß,
      cargu

      Kommentar

      Lädt...
      X