Mysql
 sql >> Base de données >  >> RDS >> Mysql

VARCHAR(4) stockant plus de quatre caractères

Si vous faites ceci :

  1. Créer ou charger un objet $o .
  2. Attribuer '12345' à la propriété/colonne en question.
  3. Enregistrer $o et laissez MySQL tronquer la valeur à '1234' .
  4. Accéder à la propriété/colonne dans $o et obtenez '12345' retour.

alors vous voyez l'un des problèmes de laisser votre base de données mutiler silencieusement vos données.

La sauvegarde réussit, votre objet n'a aucune idée que MySQL a tronqué les données, il conserve donc le '12345' autour plutôt que de recharger cette colonne à partir de la base de données, et vous avez des données incohérentes entre vos mains.

Si vous comptez sur MySQL pour tronquer silencieusement vos données, vous devrez probablement faire ceci :

  1. Créez/chargez votre objet.
  2. Mise à jour des propriétés.
  3. Enregistrer l'objet.
  4. Jetez votre référence locale à l'objet.
  5. Chargez-le à partir de la base de données pour vous assurer d'obtenir le réel valeurs.

Je vous recommande d'ajouter des validations strictes à vos objets pour éviter la troncature silencieuse dans MySQL. Activation du mode strict éviterait également ce problème, mais vous auriez alors besoin de revoir et de resserrer toute votre gestion des erreurs et la validation des données (ce qui ne serait pas vraiment une mauvaise chose).