Autor Zpráva
rad.im
Profil *
Dobrý den. Potřebuju do databáze ukládat výstupy funkcí serialize a gzcompress. Jak jsem zjistil, tak to funguje jen když je sloupec v databázi typu BLOB. V php manuálu ale píšou že je výstupem řetězec. Jak to tedy je? Musí se používat blob?
Radek Cvek
Profil *
serialize určitě můžu zapsat do Db jako řetězec (VARCHAR, TEXT) a po unserialize bude (předpokládám pole) v pořádku - vlastní zkušenost
rad.im
Profil *
Ale u objektu ne. Ten se musí uložit do blob. A o to mi jde jestli je ještě jiná možnost než blob? Nevím jaké znaky může serialize vracet, jestli by nestačilo změnit charset ve sloupci v mysql z utf8 na něco jiného.
joe
Profil
Výstupem serialize je string. Nějak nevidím důvod, proč by se nemohl uložit do sloupce typu TEXT, proč to podle tebe musí být BLOB?
rad.im
Profil *
Pokud vypíšu výstup serialize v utf8, tak vidím neidentifikovatelné znaky. Uložit to do databáze můžu, přečíst taky, ale během operace ukládání se neznámé znaky ořežou a pak už nejde objekt unserializovat. S blob to funguje. Se serializováním pole do text taky ale u objektu ne.
Keeehi
Profil
rad.im:
Pokud máš vše v jednom kódování, neměl by být problém. Vycházím z předpokladu, že aby se ořez provedl musí být někde kódování, které ty znaky nazná a proto se ořežou. Jelikož je ale v nějakém kódování zobrazíš, tak pokud všude nastavíš toto kódování, mělo by to být všude v pořádku.

Kritickým místem by mohla být komunikace PHP <-> MySQL.
mysql_query("SET NAMES 'utf-8'");
Máš?
joe
Profil
Tak nevím, žádný odborník na to nejsem. Tak už jsem to našel v dokumentaci, je tam nějaká zmínka, že to nefunguje správně pokud tam jsou utf8 znaky, tak jestli jsi to neviděl. Jinak teda nevím, tohle mě nikdy nenapadlo... dám si na to pozor a nebo si počkáme na odpověď někoho chytřejšího :)
rad.im
Profil *
To jsem v tom manuálu předtím neobjevil, nicméně vycházím z předpokladu, že php uchovává binární reprezentaci daného řetězce, tak pokud to předhodím databází tak se to uloží bit po bitu. V aplikaci používám utf8, v databázi také i komunikace je přeplá na utf8. Používám PDO bez vázaných proměnných, takže string ukládám do db jako string, null jako null, int jako int ... Možná to právě vězí v utf8 kvůli vícebytému ukládání znaků. Ale nevím proto se tu ptám :-)
joe
Profil
Ale pořád to nějak moc nechápu, přece když si vypíšeš jednoduše
echo serialize($objekt);


A ten výstup třeba pomocí phpMyAdminu uložíš do tabulky do sloupce typu TEXT, tak to bude fungovat, ne?
rad.im
Profil *
Ne. To by spíš mělo fungovat přímé uložení do db. Ve chvíli kdy se mi nezobrazí některé znaky a místo toho otazníky by se dalo chápat tak, že písmo které používám ty znaky nemá, ale když to nefunguje ani přímou cestou tak v tom problém není.

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