Mailinglisten-Archive |
Marcel Beerta schrieb am Dienstag, den 10. August 1999:
> Für mich wäre es einfacher, alle Bilder in der Datenbank zu
> speichern aber ich bin mir unsicher ob das gut für die Performance
> ist. Was denkt ihr denn davon, die datenbank vollzublobben ?!
Christian Mack hat das auf der internationalen MySQL-Mailingliste
sehr schön zusammengefaßt. Hier meine übersetzte Version mit
Ergänzungen ...
Frage:
Wie speichert man Bilder in einer MySQL-Datenbank?
Antwort in Stichpunkten:
- Zur Speicherung verwendet man einen der BLOB-Feldtypen.
- Beim Einfügen der Binärdaten müssen die Zeichen ' " \
und die Binärnull kodiert werden als \' \" \\ und \0
- Beim Auslesen aus der Datenbank erhält man direkt die
Binärdaten.
- Für Bilder größer als etwa 100 KByte ist es meist besser,
sie im Dateisystem und nicht in MySQL zu speichern.
- Speichert man Bilder in MySQL, so empfiehlt es sich, alle
BLOBs zusammen mit einem Identifikator (z.B.: bid INT)
zentral in _einer_ Tabelle zu speichern und in anderen
Tabellen nur mit dem bid zu arbeiten.
So hat man das Problem der Fragmentierung nach Löschungen und
Änderungen nur in der einen BLOB-Tabelle und die Arbeit mit
anderen Tabellen wird nicht verlangsamt.
- Tabellen können in MySQL 3.22.x nur maximal 4 GByte groß werden.
Manche Betriebssysteme beschränken das evtl. auf nur 2 GByte.
Man kann deshalb nur ca. 20000 Bilder zu 100 KByte in einer
Tabelle ablegen.
Frage:
Wie verwende ich solche Bilder in HTML-Seiten?
Antwort:
- In der HTML-Seite verwendet man ein normales <IMG>-Tag,
gibt als URL für das Bild aber ein CGI-Skript oder PHP-Programm
an, welches das gewünschte Bild aus der Datenbank abruft.
- Dabei muß der Content-TYpe passend zum Bild erzeugt werden, also
Content-Type: image/gif oder Content-Type: image/jpeg
Ciao,
Martin
--
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ >
PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7
php::bar PHP Wiki - Listenarchive