Autor | Zpráva | ||
---|---|---|---|
rad.im Profil * |
#1 · Zasláno: 29. 12. 2010, 18:07:01
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 * |
#2 · Zasláno: 29. 12. 2010, 20:17:41
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 * |
#3 · Zasláno: 30. 12. 2010, 01:09:10
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 |
#4 · Zasláno: 30. 12. 2010, 01:29:49
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 * |
#5 · Zasláno: 30. 12. 2010, 01:35:36
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 |
#6 · Zasláno: 30. 12. 2010, 01:50:51
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'"); |
||
joe Profil |
#7 · Zasláno: 30. 12. 2010, 01:55:33
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 * |
#8 · Zasláno: 30. 12. 2010, 03:08:16
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 |
#9 · Zasláno: 30. 12. 2010, 03:19:31
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 * |
#10 · Zasláno: 30. 12. 2010, 13:08:19
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í.
|
||
Časová prodleva: 13 let
|
0