MySQL a binarni data

Michal Krause michal na krause.cz
Čtvrtek Prosinec 7 11:23:43 CET 2000


On 07/12/2000, Karel Zak wrote:

> > potrebuji ukladat do MySQL databaze pole cisel. Doposud jsem to delal
> > tak, ze jsem pole prevadel na retezec "10,50,100,200,4,43,..." a zpet. Z
> > duvodu urychleni aplikace bych rad presel na nejakou rozumnejsi formu
> > ukladani.
> > Asi nejjednodussi by bylo primo ulozeni v binarni podobe, jenze ja
> > potrebuji ta data v prgramu menit a zase ukladat zpet. Je jasne, ze
> > query (UPDATE) s binarnimi daty neni to prave orechove.
> 
>  Proc? Moc nechapu v cem mas problem. Pokud tam protlacis INSERT tak 
> UPDATE je to same ne?

Ja tamale neprotlacim ani ten INSERT. Prece kdyz mam nejakou strukturu a
v ni binarni data (treba ta cisla), nemuzu je nijak rozumne hodit do
query, protoze by tam mohla byt nula. Jde to jedine prevodem na string,
coz delam v podstate ted a chci se toho zbavit.

>  Uz je to par let co do zminovane SQL (ano i ja pouzivam MySQL:-)

Neuveritelne :)

>  ukladam binarni data z PHP bez vetsich problemu, pochopitelne, ze je
>  nutne ta data nejak osetrit (napr. PHP - AddSlashes() apod.).

A co udela AddSlashes s takovymto polem bajtu:

12 34 39 40 49 6 50 0 48 3 90 48 5 96

?

>  Nebo muzes ty binarni data prevadet na ASCII nejakym lepsim zpusobem
>  (base64, prevod na hexa apod.) - pokud na tom ASCII trvas :-)

Ja naopak vubec na ASCII netrvam, chci proste mit libovolna binarni
data, treba obrazek (to sice neni zrovna ten muj pripad, ale pro
demonstraci to staci). Dejme tomu, ze ho chci dostat do databaze ze
sveho programu v C. Takze nactu do bufferu obsah souboru a potom udelam
co? INSERT INTO table VALUES ('ten_muj_buffer_i_s_nulami') asi tezko :)

uuencode a podobny nesmysly do toho tahat nechci, protoze cilem je
zbavit se sprintf(string, "%d,%d,...", pole[0], pole[1], ...) pri
ukladani a sscanf() nebo neceho podobneho pri nacitani z databaze. A jak
jiste uznas, s uuencodem bych si moc nepomohl :)

> > Mozna, ze se na to snazim jit uplne blbe, takze uvitam i jine
> > navrhy, jak to resit. Rozhodne ale nechci delat pro to pole jinou
> > tabulku nebo zvlastni sloupce pro kazdou hodnotu, uz proto, ze delka
> > toho pole je promenliva. (A take nechci menit SQL server :)
> 
>  No mozna mi to dochazi pomalu - ty chces ten UPDATE jen na nejake cislo 
> v ramci toho pole? To asi neudelas... jo mozna PostgreSQL:
> 
> 	UPDATE x SET yyy[2]='10';

Nene, to nepotrebuju :)

>  IMHO ta aplikace musi byt opravdu hodne optimalizovana pokud uz i
>  int->ascii->int zdrzuje :-)

a) kdyz se to udela mnohomilionkrat denne, tak by to mohlo byt (alespon
trochu) znat
b) hlavni efekt bude v tom, ze pri binarnim zpusobu ulozeni dat se vejdu
do pole fixni delky, zatimco pro string uz musim pouzit text nebo blob,
ktery je, jak znamo, variabilni delky. A to uz by melo byt znat hodne.

S pozdravem
--
Michal Krause                                                       /\
ICQ: 7665279            Informace (nejenom) ze sveta Linuxu      /\/  \
email: michal na krause.cz _______ http://www.root.cz/ _______ NAVRCHOLU.cz

                           Penguino  veritas


Další informace o konferenci Test