sql >> Database >  >> RDS >> Mysql

VARCHAR(4) slaat meer tekens op dan vier

Als je dit doet:

  1. Maak of laad een object $o .
  2. Wijs '12345' toe naar de betreffende eigenschap/kolom.
  3. Opslaan $o en laat MySQL de waarde afkappen tot '1234' .
  4. Toegang tot de eigenschap/kolom in $o en ontvang '12345' terug.

dan zie je een van de problemen om je database je gegevens in stilte te laten manipuleren.

Het opslaan is gelukt, uw object heeft geen idee dat MySQL de gegevens heeft afgekapt, dus het behoudt de '12345' in plaats van die kolom opnieuw te laden uit de database, en u heeft inconsistente gegevens in handen.

Als u erop vertrouwt dat MySQL uw gegevens in stilte afkapt, moet u waarschijnlijk dit doen:

  1. Maak/laad uw object.
  2. De eigenschappen bijgewerkt.
  3. Sla het object op.
  4. Gooi je lokale verwijzing naar het object weg.
  5. Laad het vers uit de database om er zeker van te zijn dat je de echte . krijgt waarden.

Ik raad aan om strikte validaties aan uw objecten toe te voegen om de stille inkorting in MySQL te voorkomen. strikte modus inschakelen zou dit probleem ook voorkomen, maar dan zou u al uw foutafhandeling en gegevensvalidatie moeten herzien en aanscherpen (wat niet echt een slechte zaak zou zijn).




  1. Rownum-instructie retourneert een andere rij dan zonder deze

  2. postgresql-trigger op tsvector-kolom krijgt ERROR:kolom bestaat niet

  3. Cannot SUM(TO_NUMBER(varchar2 field)) :ORA 01722 [ORACLE]

  4. prestatiestraf van strings als primaire sleutels?