Autor Zpráva
SteveO
Profil *
Zdravím, potřeboval jsem v DB hromadně nahradit text "A&B" za "A/B". Stáhnul jsem si tedy dump a provedl search/replace.
Až pak jsem ale zjistil, že databáze obsahuje serializované texty. Ale zdá se, že nahrazením nedošlo k žádnému problému.
Znamená to, že je možné v serializovaných řetězcích nahrazovat části, aniž by to skončilo (mojí) smrtí, pokud má stará část a nová část stejný počet znaků?
Díky
Keeehi
Profil
SteveO:
Tak pokud se trefíš na správné místo tak ano. Mohl by ses ale taky třeba trefit do klíče pole nebo do objektu a to už by problém být mohl.
SteveO
Profil *
Trefil jsem se určitě jen do hodnot.
Takže teda lze říct, že:

search&replace - fiat -> audi = serializované řetězce zůstanou v pořádku
search&replace - fiat -> honda = serializované řetězce jsou v háji

? Díky.
Joker
Profil
Záleží na způsobu serializace. Je jich víc.

Obecně se nedá spolehnout, že samotná stejná délka řetězců zajistí, že se serializovaná data nepoškodí (už proto, že se ten řetězec může vyskytnout na neočekávaných místech).
Je potřeba si to ověřit pro každý jednotlivý případ.
milous
Profil
Pokud je to serializováno pomocí PHP funkce, tak si všimni toho rozdílu:
a:1:{i:0;s:5:"honda";}
a:1:{i:0;s:4:"audi";}
Ukládá se tam totiž délka hodnoty. Řešení je to prohnat přes php a udělat replace až v unserializované podobě (je to jeden cyklus, nic moc složitého). Jinak pokud to nechceš nebo nemůžeš uložit tak nějak rozumě (neserializovat, ale použít vazby mezi tabulkama), tak si raději asi ukládej ve formátu json (má to výhodu, že je to přenositelné nezávisle na programovacím jazyku).

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