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

VARCHAR(4) gemmer flere tegn end fire

Hvis du gør dette:

  1. Opret eller indlæs et objekt $o .
  2. Tildel '12345' til den pågældende ejendom/kolonne.
  3. Gem $o og lad MySQL afkorte værdien til '1234' .
  4. Få adgang til egenskaben/kolonnen i $o og få '12345' tilbage.

så ser du et af problemerne ved at lade din database manipulere dine data i stilhed.

Gemningen lykkes, dit objekt har ingen idé om, at MySQL har afkortet dataene, så det beholder '12345' rundt i stedet for at genindlæse den kolonne fra databasen, og du har inkonsistente data på dine hænder.

Hvis du er afhængig af, at MySQL lydløst afkorter dine data, bliver du sandsynligvis nødt til at gøre dette:

  1. Opret/indlæs dit objekt.
  2. Opdaterede egenskaberne.
  3. Gem objektet.
  4. Smid din lokale reference til objektet.
  5. Indlæs den frisk fra databasen for at sikre, at du får den rigtige værdier.

Jeg vil anbefale at tilføje strenge valideringer til dine objekter for at undgå den tavse trunkering inde i MySQL. Aktiverer streng tilstand ville også undgå dette problem, men så bliver du nødt til at gennemgå og stramme op på al din fejlhåndtering og datavalidering (hvilket egentlig ikke ville være en dårlig ting).




  1. Hvad er materialiserede synspunkter?

  2. Sådan konverteres IPv6 fra binær til lagring i MySQL

  3. Sådan får du række-id i mysql

  4. Tabel og indeksstørrelse i SQL Server