Binary Daten in SQL, welche Art Medium

dherr

Neuer Benutzer
Beiträge
2
Hallo zusammen,
ich verwende den Binary Datentyp zur Speicherung von Images und Audio in SQL-Tabellen.
Meine Frage hierzu ist:
Kann man beim Einlesen von Binarstring feststellen, welche Art von Medium er darstellt. Also in etwa ob es sich um ein Image oder eine Audiodatei handelt? Gibt es da irgendeine Kennung?

Grüße - Dietrich
 
Werbung:
Willst du das mit reinem SQL lösen oder innerhalb irgendeiner Client Anwendung?

Dateien so wirklich in der DB gehalten habe ich noch nicht. Ich habe mal so kleinere Link-Dateien für unser DMS erzeugt, grundsätzlich kann ich also den Datei-Header schreiben / lesen. SQL Funktionen wird es dafür aber vermutlich keine geben und wie performant das wird, weiß ich auch nicht :)
 
Hallo zusammen,
ich verwende den Binary Datentyp zur Speicherung von Images und Audio in SQL-Tabellen.
Meine Frage hierzu ist:
Kann man beim Einlesen von Binarstring feststellen, welche Art von Medium er darstellt. Also in etwa ob es sich um ein Image oder eine Audiodatei handelt? Gibt es da irgendeine Kennung?

Grüße - Dietrich
Du mußt den Header lesen und dann interpretieren was es ist. So wie das jedes Programm macht. Außerdem ist die Lösung deines Problems eine Zusatzspalte, die die benötigte Information enthält.
 
Das Googeln mit diesen Begriffen bringt genua NICHTS..
Das kann nicht sein.

so könnte es z.B. gehen und das zeigt eine Google Suche auch:
1699999712176.png
Dafür braucht man eine Linux Shell unter Windows. Hier ist es Git Bash, es gibt diverse andere, bei denen es wahrscheinlich ganz genauso läuft.

Du MUSST das (und willst es vermutlich) nicht selbst machen. Wenn Du lediglich 3 verschiedene Formate erkennen möchtest, ist es vielleicht was anderes. Unter Windows wird ja gerne die Dateiendung dafür verwendet, vielleicht reicht das auch schon.
 
Mmh, es gibt ja verschiedene Wege, Dateidaten in einer DB zu verwalten.

Die Frage war:
Kann man beim Einlesen von Binarstring feststellen, welche Art von Medium er darstellt.
Die Antwort soll sein?
Außerdem ist die Lösung deines Problems eine Zusatzspalte, die die benötigte Information enthält.
Genau um die Befüllung einer solche Zusatzspalte geht es doch wohl oder? Und wie soll dabei Redundanz entstehen?
das wäre redundant.

Vielleicht übersehe ich etwas, aber wenn ich in einer DB Spalte lediglich die Binärdaten einer Datei habe und nach einem Weg suche(frage), wie ich daraus den Typ bestimmen kann, dann doch offensichtlich zu dem Zweck es zusätzlich zum Binary zu persistieren und von da an genau zu wissen, was es ist, statt es prüfen zu müssen.
 
Genau um die Befüllung einer solche Zusatzspalte geht es doch wohl oder? Und wie soll dabei Redundanz entstehen?
der Dateityp ergibt sich aus dem Header der Datei. Binärdateien haben da üblicherweise eine ganz spezifische Kennung. Du kannst also aus dem Inhalt der binären Spalte den Dateityp ermitteln. Als, Du speicherst da ein PDF. Das läßt sich als Typ ermitteln. In die redundate Spalte schreibst Du 'PDF'. Morgen machst Du ein Update und erstetzt das PDF mit einer MP3-Datei. Und nun hast Du ein Problem, weil in der redundanten Spalte nun PDF steht und nicht MP3.

Beispiel für eine 'berechnete' Spalte:

Code:
postgres=# create table objekte (id int generated always as identity, breite int, laenge int, flaeche int generated always as (breite * laenge) stored); 
CREATE TABLE
postgres=# insert into objekte (breite, laenge) values (10,12);
INSERT 0 1
postgres=# select * from objekte;
 id | breite | laenge | flaeche 
----+--------+--------+---------
  1 |     10 |     12 |     120
(1 row)

postgres=# insert into objekte (breite, laenge, flaeche) values (2,3,100);
ERROR:  cannot insert a non-DEFAULT value into column "flaeche"
DETAIL:  Column "flaeche" is a generated column.
postgres=#

Dieses Konzept ginge halt auch zur Ermittlung des Dateitypes.
 
Morgen machst Du ein Update und erstetzt das PDF mit einer MP3-Datei
Ja, logisch, ich weiß, was Redundanz ist, andere sicher auch. Da es hier um Binärdateien geht, die dank hinreichender Größe -wie angedeutet- vielleicht nicht im Sekundentakt durch die Gegend gefeuert werden, besonders nicht aktualisiert werden, stellt sich die Redundanzfrage nicht primär. Der TE stellt sie auch nicht, übrigens.
Solange der TE nicht weiß, welcher Typ es ist und nicht weiß, wie er den bestimmen kann, kann es auch nicht redundant gespeichert werden. Also warum diese Warnung? Und warum der sinnlose Hinweis, die gesuchte Information einer Zusatzspalte zu entnehmen?

Es gibt hier 2 Vorschläge, den Typ zu ermitteln:
1 Verwendung des Programms
Code:
file[code/]
2 "selbst ermitteln"

Beide Varianten sind mit einem gewissen Aufwand verbunden. Den würde man vermutlich nur ein einziges Mal betreiben, initial. Aus Bequemlichkeit und Performancegründen würde man wohl von da an, die ermittelten Typinformationen nutzen, die man in der DB abgelegt hat.
 
Und warum der sinnlose Hinweis, die gesuchte Information einer Zusatzspalte zu entnehmen?
Ich glaube ich muß mich von Dir net blöd anmachen lassen, haste das verstanden??? Im übrigen habe ich die Lösung beschrieben. Header lesen und den Typ feststellen. Und sowas macht man programmtisch mit einem Client und net mit einem Gefrickel mit Linux Subsystem. Einfach mal lesen hilft anstatt hier zu bashen...
 
Ich glaube ich muß mich von Dir net blöd anmachen lassen, haste das verstanden??? Im übrigen habe ich die Lösung beschrieben. Header lesen und den Typ feststellen. Und sowas macht man programmtisch mit einem Client und net mit einem Gefrickel mit Linux Subsystem. Einfach mal lesen hilft anstatt hier zu bashen...
das bashing kommt hier deutlich von Dir @t-sql ...
 
Werbung:
Ich glaube ich muß mich von Dir net blöd anmachen lassen, haste das verstanden???
Das hatte ich nicht vor, weder in vorigen Posts noch zukünftig.

Meine Beiträge in diesem Thread drehen sich neben der Sachfrage eher darum, dass ich mir bei den Antworten als TE teilweise verarscht vorkommen würde.
"Wie komme ich an die Daten?" "Aus einer Zusatzspalte, die die benötigten Infos enthält."
Müssen wir meinetwegen nicht weiter vertiefen. Vermutlich ist der TE bereits über alle Berge.

sowas macht man programmtisch mit einem Client und net mit einem Gefrickel mit Linux Subsystem
file ist ein normales Programm, bestimmt kein Gefrickel. Git Bash und andere Shells sind für Windows kompiliert, alles ganz normale Programme.
Das scriptet man und fertig.
Mir ist nicht bekannt, dass es seitens Windows direkt ein Programm gibt, das vergleichbares leistet wie file. Falls doch, dann gerne auch direkt von Windows selbst. Bevor ich sowas aber selbst schreiben würde, greife ich dann doch lieber auf Jahrzehnte bewährte Programme wie file zurück.
 
Zurück
Oben