sql >> Base de Datos >  >> RDS >> Mysql

VARCHAR(4) almacenando más caracteres que cuatro

Si estás haciendo esto:

  1. Crear o cargar un objeto $o .
  2. Asignar '12345' a la propiedad/columna en cuestión.
  3. Guardar $o y dejar que MySQL trunque el valor a '1234' .
  4. Acceda a la propiedad/columna en $o y obtiene '12345' volver.

entonces está viendo uno de los problemas de dejar que su base de datos manipule silenciosamente sus datos.

El guardado tuvo éxito, su objeto no tiene idea de que MySQL ha truncado los datos, por lo que mantiene el '12345' en lugar de volver a cargar esa columna de la base de datos, y tiene datos inconsistentes en sus manos.

Si depende de que MySQL trunque silenciosamente sus datos, entonces probablemente tendrá que hacer esto:

  1. Cree/cargue su objeto.
  2. Se actualizaron las propiedades.
  3. Guarde el objeto.
  4. Deseche su referencia local al objeto.
  5. Cárguelo nuevo de la base de datos para asegurarse de obtener el real valores.

Recomendaría agregar validaciones estrictas a sus objetos para evitar el truncamiento silencioso dentro de MySQL. Activar modo estricto también evitaría este problema, pero luego necesitaría revisar y ajustar todo el manejo de errores y la validación de datos (lo que realmente no sería algo malo).