Mysql
 sql >> Datenbank >  >> RDS >> Mysql

VARCHAR(4) speichert mehr als vier Zeichen

Wenn Sie dies tun:

  1. Erzeuge oder lade ein Objekt $o .
  2. Weise '12345' zu zu der betreffenden Eigenschaft/Spalte.
  3. Speichere $o und lassen Sie MySQL den Wert auf '1234' kürzen .
  4. Greifen Sie auf die Eigenschaft/Spalte in $o zu und erhalten Sie '12345' zurück.

dann sehen Sie eines der Probleme, wenn Ihre Datenbank Ihre Daten stillschweigend verstümmelt.

Das Speichern ist erfolgreich, Ihr Objekt hat keine Ahnung, dass MySQL die Daten abgeschnitten hat, sodass es den '12345' behält herum, anstatt diese Spalte aus der Datenbank neu zu laden, und Sie haben inkonsistente Daten zur Hand.

Wenn Sie darauf angewiesen sind, dass MySQL Ihre Daten stillschweigend abschneidet, müssen Sie wahrscheinlich Folgendes tun:

  1. Erstellen/Laden Sie Ihr Objekt.
  2. Eigenschaften aktualisiert.
  3. Speichern Sie das Objekt.
  4. Werfen Sie Ihren lokalen Verweis auf das Objekt weg.
  5. Laden Sie es frisch aus der Datenbank, um sicherzustellen, dass Sie das echte erhalten Werte.

Ich würde empfehlen, Ihren Objekten strenge Validierungen hinzuzufügen, um das stille Abschneiden in MySQL zu vermeiden. Aktivieren des strengen Modus würde dieses Problem auch vermeiden, aber dann müssten Sie Ihre gesamte Fehlerbehandlung und Datenvalidierung überprüfen und verschärfen (was nicht wirklich eine schlechte Sache wäre).