sql >> Databasteknik >  >> RDS >> Mysql

VARCHAR(4) lagrar fler tecken än fyra

Om du gör detta:

  1. Skapa eller ladda ett objekt $o .
  2. Tilldela '12345' till fastigheten/kolumnen i fråga.
  3. Spara $o och låt MySQL trunkera värdet till '1234' .
  4. Åtkomst till egenskapen/kolumnen i $o och hämta '12345' tillbaka.

då ser du ett av problemen med att låta din databas manipulera dina data tyst.

Sparningen lyckas, ditt objekt har ingen aning om att MySQL har trunkerat data så det behåller '12345' runt istället för att ladda om den kolumnen från databasen, och du har inkonsekventa data på dina händer.

Om du är beroende av att MySQL tyst trunkerar din data måste du förmodligen göra så här:

  1. Skapa/ladda in ditt objekt.
  2. Uppdaterade egenskaperna.
  3. Spara objektet.
  4. Kasta bort din lokala referens till objektet.
  5. Ladda in det färskt från databasen för att se till att du får den riktiga värden.

Jag skulle rekommendera att lägga till strikta valideringar till dina objekt för att undvika den tysta trunkeringen inuti MySQL. Aktiverar strikt läge skulle också undvika det här problemet men då skulle du behöva se över och skärpa all din felhantering och datavalidering (vilket egentligen inte skulle vara en dålig sak).




  1. phpMyAdmin SQL-fel Okänt nyckelord nära FIELDS

  2. MySQL dödlägen med lagrad procedur som genererar UID

  3. Jokerteckensökning i MySQL-fulltextsökning

  4. Ansluter F# till Salesforce.com