Mysql
 sql >> Database >  >> RDS >> Mysql

VARCHAR(4) memorizza più caratteri di quattro

Se stai facendo questo:

  1. Crea o carica un oggetto $o .
  2. Assegna '12345' alla proprietà/colonna in questione.
  3. Salva $o e lascia che MySQL tronchi il valore a '1234' .
  4. Accedi alla proprietà/colonna in $o e ottieni '12345' indietro.

allora stai vedendo uno dei problemi di lasciare che il tuo database macchino silenziosamente i tuoi dati.

Il salvataggio ha esito positivo, il tuo oggetto non ha idea che MySQL abbia troncato i dati, quindi mantiene il '12345' in giro invece di ricaricare quella colonna dal database e hai dati incoerenti tra le mani.

Se dipendi da MySQL che tronca silenziosamente i tuoi dati, probabilmente dovrai farlo:

  1. Crea/carica il tuo oggetto.
  2. Aggiornate le proprietà.
  3. Salva l'oggetto.
  4. Butta via il tuo riferimento locale all'oggetto.
  5. Caricalo fresco dal database per assicurarti di ottenere il reale valori.

Consiglierei di aggiungere convalide rigorose ai tuoi oggetti per evitare il troncamento silenzioso all'interno di MySQL. Attivazione della modalità rigorosa eviterebbe anche questo problema, ma dovresti rivedere e rafforzare tutta la gestione degli errori e la convalida dei dati (il che non sarebbe davvero una brutta cosa).