[MySQL] Speicherung von Binärzahlen (512 Zeichen)

Jacka

Erfahrenes Mitglied
Hallo zusammen,

bitte keine Schläge.. uff. :confused:

Also, ich habe einen "String" von 512 "Einsen und Nullen", und möchte diese in meine MySQL-Datenbank speichern. Ich habe jetzt schon jeden Daten-Typ ausprobiert, aber er speichert immer nur Müll..

Bei ENUM hab ich zwar 0 und 1 angegeben, aber dann ging nur ein Zeichen, also entweder 1 oder 0, nicht aber meine 512.

Wie kann ich meine Daten am besten speichern, damit ich später den Binärcode auch
wieder vernüpftig auslesen kann?

Vielen Dank und Grüße,
Jacka
 
Einfachste Lösung wäre die Speicherung des Strings als das, was es ist: ein String (in SQL aka "TEXT"). Hierzu bietet sich auf Grund der 512 Stellen natürlich kein tinytext an, aber BLOB (binary large object mit 2^16 - 2 Zeichen).
Alternativ würde sich ein (Var)Binary Feld empfehlen, aber hier tritt das Problem auf, dass nur 256 Zeichen gespeichert werden können. Hier könnte sich eine Codierung des Strings anbieten, die sequenziell zwei oder mehr Folgeglieder bindet:
Code:
00 => 0
01 => 1
10 => 2
11 => 3
So würde der String in ein 256 Byte großes Feld passen.

Da es sich um einen String handelt, ist es relativ egal, wie gespeichert wird, solange es ein Textfeld ist. Effizienter könnte aber unter Umständen das Splitten des Strings in (2^n)er Stücke sein, wie zB in Stücke der Länge 8 Zeichen. Aus diesen kann man dann ganzzahlige Werte reproduzieren, welche - so würde ich es zumindest erstmal machen - in einen viel kürzeren String gewandelt werden können, wie zB einen String aus "hexadezimalen" Werten, oder einen anderweitig codierten String.

Alles, was nach "BLOB" angesprochen wurde, ist aber reine Spielerei, und schätzungsweise in keinem Verhältnis zur Effizienz der Speicherung als BLOB.

Muss mich nochmal revidieren: Laut Dokumentation fasst varchar auch bis zu 2^16 Byte mit einem Overhead von 2 "Extra"byte, sofern die verwendete MySQL Version jünger als 5.0.3 ist.
 
Zuletzt bearbeitet:
Hi!

Ich hatte wie gesagt schon alle Formate durch, auch BLOB, doch es kam nur Müll dabei raus. Bei BLOB erhielt ich 65 mal die 9 beim Auslesen.
Als Text kam auch nur eine kryptische Zahl herraus.

Doch jetzt habe ich den Fehler gefunden.. wie blöd..
Meine alte SQL-Anweisung:
PHP:
"UPDATE molecule SET Fingerprint = ".$fingerprint."  WHERE ID = "$ID;

Die Anführungszeichen um den String fehlten.. :-(
Meine funktionierende SQL-Anweisung:
PHP:
"UPDATE molecule SET Fingerprint = '".$fingerprint."'  WHERE ID = "$ID;

Aber vielen Dank! Jetzt speichere ich die Daten als BLOB, geht tatsächlich schneller als Text! :)

Viele Grüße,
Jacka
 

Neue Beiträge

Zurück