You are here
BLOB's aus der MySQL Datenbank herausklauben
Ein Kunde, welcher mit digitalen Zertifikaten zu tun hat, hatte ein Problem mit einem solchen. Also mussten wir nachforschen, was das Problem war.
Weil das Zertifikat in binärer Form vorliegt, ist es in einem BLOB
gespeichert und wir mussten es aus der Datenbank herausklauben um einige Tests damit durchzuführen.
Als erstes kam mir in den Sinn, das Zertifikat mit dem Befehl SELECT INTO OUTFILE
zu erhalten. Aber das Verifizierungstool reklamierte und sagte uns, dass das Zertifikat ein falsches Format habe.
Zum Glück fand ich in der MySQL Dokumentation den folgenden Satz: If you use INTO DUMPFILE
instead of INTO OUTFILE
, MySQL writes only one row into the file, without any column or line termination and without performing any escape processing. This is useful if you want to store a BLOB
value in a file.
Wir haben es ausprobiert mit:
mysql> SELECT certificate INTO DUMPFILE '/tmp/certificate.bin' FROM identity WHERE id = 42;
und es hat perfekt funktioniert. Das Zertifikat-Verifizierungstool hatte nichts mehr zu meckern und wir konnten weiter nachforschen, warum das Zertifikat überhaupt ein Problem verursacht hat...
Mit diesem Befehl, welchen ich vorher noch nicht kannte, ist es sehr einfach ein einzelnes BLOB
aus der Datenbank in eine Datei zu dumpen und dieses von dort aus weiter zu verarbeiten.
Zur Erinnerung: MySQL hat eine generelle Protokoll-Limitation für BLOB
's von 1 Gbyte und die Grösse für max_allowed_packet
muss entsprechend für den Client UND den Server angepasst werden wenn grosse BLOB
's verwendet werden. Weitere Informationen über MySQL-Limitationen finden Sie hier.
Im weiteren muss der Typ des BLOB
's entsprechend der erwarteten Grösse des BLOB
's richtig gewählt werden. Siehe auch: Data Type Storage Requirements.
Literatur
- oli's blog
- Log in or register to post comments