Probleme mit binären Daten in MySQL

port29

deus.Server
Hallo Leute,

ich kämpfe gerade mit binären Daten und MySQL. Ich möchte Fotos in einer MySQL Datenbank speichern, als BLOB eben. Doch das ist mir aus welchen Gründen auch immer nicht möglich. Ab einer Größe von ca. 500kb passiert nichts. phpMyAdmin hat mir dann eine weiße Seite geliefert und der MySQL Client gibt NULL zurück:

Code:
mysql> select LOAD_FILE('/Users/dr/Desktop/IMG_1162.jpg');
+---------------------------------------------+
| LOAD_FILE('/Users/dr/Desktop/IMG_1162.jpg') |
+---------------------------------------------+
| NULL                                        | 
+---------------------------------------------+
1 row in set, 1 warning (0,00 sec)

Was kann man dagegen machen?
 
Was kann man dagegen machen?
:google: ;-)
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_load-file hat gesagt.:
The file must be readable by all and its size less than max_allowed_packet bytes.
[…]
If the file does not exist or cannot be read because one of the preceding conditions is not satisfied, the function returns NULL.
Du müsstest also entweder a) den Wert von max_allowed_packet hochsetzen oder b) erkennen, dass relationale Datenbanksysteme i.d.R. zum Speichern großer Mengen von Binärdaten weder gedacht noch geeignet sind.

Grüße, Matthias
 
Zuletzt bearbeitet:
Du müsstest also entweder a) den Wert von max_allowed_packet hochsetzen

Code:
mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
|             33553408 | 
+----------------------+
1 row in set (0,00 sec)

Also wenn ich mich nicht verrechnet habe, sind es 32Mbyte. Daran kann es also nicht liegen.

b) erkennen, dass relationale Datenbanksysteme i.d.R. zum Speichern großer Mengen von Binärdaten weder gedacht noch geeignet sind.

Diese Diskussion hatten wir hier schon öfters. Ergebnis war immer, dass die einen Coder sagen, dass das Speichern von Binärdaten in einer DB keine Nachteile hat, die anderen waren genau anderer Meinung.

In meinem Fall werden die hochgeladenen Daten nicht dauerhaft gespeichert, sondern fliegen binnen 1-2 Stunden wieder runter. Mit RoR lässt sich das löschen der Session samt Daten mit "session.destroy" löschen. Dann ist auch alles inkl. Abhängigkeiten weg. Man muss also kein Haufen FS Operationen ausführen.
 
Ganz ehrlich, ich verstehe momentan nur Bahnhof!

Code:
mysql> select LOAD_FILE('/Users/dr/Desktop/IMG_1162.jpg');
+---------------------------------------------+
| LOAD_FILE('/Users/dr/Desktop/IMG_1162.jpg') |
+---------------------------------------------+
| NULL                                        | 
+---------------------------------------------+
1 row in set, 1 warning (0,00 sec)

mysql> SHOW WARNINGS;
+---------+------+---------------------------------------------------------------------------------+
| Level   | Code | Message                                                                         |
+---------+------+---------------------------------------------------------------------------------+
| Warning | 1301 | Result of load_file() was larger than max_allowed_packet (33553408) - truncated | 
+---------+------+---------------------------------------------------------------------------------+
1 row in set (0,00 sec)

Die Datei ist aber nicht so groß
Code:
dr$ ls -al /Users/dr/Desktop/IMG_1162.jpg
-rwxrwxrwx@ 1 dr  staff  3500318 15 Aug 14:42 /Users/dr/Desktop/IMG_1162.jpg

Der Fehler ist irgendwie seit dem Upgrade auf Snow Leopard gekommen...
 
Zurück