Autor Zpráva
Filip111
Profil
Ahoj,
potřebuji mít v DB nějaká binární data a protože jsou větší než 1MB, v první řadě selže insert do DB (1MB je standardně limit pro velikost SQL dotazu).
Napadlo mě u většího souboru ho projet v cyklu pomocí fread a zpracovávat třeba jen po 500kB...napoprvé udělat do DB standarní insert t, zjistit LAST_INSERT_ID a pak dělat update s tím, že bych přidával po dalších 500kB.

To bohužel nefunguje
"update att set ccc = ccc + '".mysql_escape_string($part)."' where id=3"

Nevíte, zda lze vůbec něco jako přičítání nebo přidávání dat do blobu dělat?

Díky, Filip
(nešťourejte prosím proč to ukládám do DB...jo a LOAD_FILE jsem už zkoušel ale to mi na win nefunguje vůbec)
Kajman_
Profil *
stringy se nespojují díky + ale funkcí concat.
Filip111
Profil
pravda...to mě mohlo napadnout :(

Každopádně jsem neuspěl - parametr max_allowed_packet se netýká jen samotné velikosti SQL dotazu, ale i objemu dat se kterým se pracuje.

"update att set ccc = concat(ccc, '".mysql_escape_string($part)."') where id=3"

Pokud tedy concat vrátí výsledek větší než 1MB (což je standardní hodnota max_allowed_packet), stejně to skončí chybou (resp. do blobu se uloží null).
LOAD_FILE není žádná spása - platí pro něj úplně stejný limity.

Ve výsledku to tedy vypadá, že do jednoho pole nelze uložit nikdy větší hodnota než max_allowed_packet...přes to prostě nejede vlak. Na lokálu jsem změnil nastavení MySQL a bylo to v pořádku, na hostingu s tím ale asi počítat nelze.
Jestli máte někdo nápad jak to obejít, sem s ním.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0