Die Meinungen, ob man komplette Objekte ablegen sollte oder nicht, gehen sehr auseinander.
Dagegen spricht zum Beispiel, dass man nicht mehr nach Inhalten in einem Objekt suchen kann oder immer der komplette Text neugeschrieben werden muss, auch wenn man nur eine Zahl ändert. Dafür spricht auch einiges, jedenfalls geht es mir darum, dass ich heute vor einem Problem stand.

Folgendes Konstrukt habe ich serialisiert (mittels serialize), in ein utf8-unicode-ci TEXT Feld gespeichert. Nach dem auslesen beschwerte sich unserialize über ungültige Daten und mit dem Objekt war nichts mehr anzufangen.

class Address {
  /*diverse Properties, hauptsächlich Strings*/
}
class MethodSpecial extends Method {
  /*diverse andere Properties*/
}
abtract class Method {
  protected $address;
  public function setAddress(Address $address){
    $this->address = $address;
  }
}

$address = new Address(.....);
$method = new SpecialMethod(....);
$method->setAddress($address);

$string = serialize($method);

Gibt man $string mit einem einfachen echo aus, fällt auf, dass hier komische Sonderzeichen vorhanden sind, speichert man das ganze in ein TEXT Feld in einer Tabelle, werden aus diesen Zeichen Sternchen. Das unserialize schlägt fehl.

Nun gibt es zwei Ansätze, dieses Problem zu lösen:
1. base64_encode und base64_decode: einfach den String vorher kodieren und dann speichern, beim auslesen dann erst dekodieren und danach deserialisieren.
2. GLOB bzw. BLOB statt TEXT als Feldtyp nutzen (nicht von mir getestet, der Tip wurde mit von einem Bekannten gegeben)

3 Antworten zu “Objekte serialisiert in einer MySQL Datenbank ablegen”

  1. René says:

    Es gibt da noch die Typen BINARY und VARBINARY (http://dev.mysql.com/doc/refman/5.0/en/binary-varbinary.html). Vielleicht geht es damit ja auch.

  2. Michael says:

    Wenn ich mal dazu komme, werde ich das mal testen ….. aber zur Zeit komme ich nur selten zu sowas, mal sehen

  3. Michael says:

    okay, blog/mediumblob tuns auch….. stress umsonst

Hinterlasse einen Kommentar.

Network-wide options by YD - Freelance Wordpress Developer