Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

VARCHAR(4) armazenando mais caracteres que quatro


Se você estiver fazendo isso:
  1. Criar ou carregar um objeto $o .
  2. Atribuir '12345' para a propriedade/coluna em questão.
  3. Salvar $o e deixe o MySQL truncar o valor para '1234' .
  4. Acesse a propriedade/coluna em $o e obtenha '12345' de volta.

então você está vendo um dos problemas de permitir que seu banco de dados manipule silenciosamente seus dados.

O salvamento é bem-sucedido, seu objeto não tem ideia de que o MySQL truncou os dados, então ele mantém o '12345' em vez de recarregar essa coluna do banco de dados, e você tem dados inconsistentes em suas mãos.

Se você estiver dependendo do MySQL truncando seus dados silenciosamente, provavelmente terá que fazer isso:
  1. Crie/carregue seu objeto.
  2. Atualizou as propriedades.
  3. Salve o objeto.
  4. Jogue fora sua referência local ao objeto.
  5. Carregue-o fresco do banco de dados para ter certeza de obter o real valores.

Eu recomendaria adicionar validações estritas aos seus objetos para evitar o truncamento silencioso dentro do MySQL. Ativando o modo estrito também evitaria esse problema, mas você precisaria revisar e aprimorar todo o tratamento de erros e validação de dados (o que não seria realmente uma coisa ruim).