Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, boa noite!
Estou sofrendo com modedas no mysql
Eu coloco float(20,2), double(20,2) e até decimal(20,2)mas toda as vezes que vou entar gravar um valor do tipo:
123456789012.32, diz que ewsta fora do range.
Mas se eu colcar apenas 6 digitos antes do ponto passa.
Onde esta o erro?
Tai:
CREATE TABLE `imoveiscadastrovenda` (
`id_imovel` int(4) unsigned NOT NULL AUTO_INCREMENT,
`codigo_imovel` varchar(10) NOT NULL DEFAULT '',
`id_clientes_imovel` int(4) NOT NULL DEFAULT '0',
`imovel_tipo_imovel` int(2) NOT NULL DEFAULT '0',
`endereco_imovel` varchar(200) NOT NULL DEFAULT '',
`bairro_imovel` varchar(100) NOT NULL DEFAULT '',
`cidade_imovel` varchar(100) NOT NULL DEFAULT '',
`estado_imovel` char(3) NOT NULL DEFAULT '',
`preco_imovel` decimal(8,2) NOT NULL DEFAULT '0.00',
`baixa_imovel` char(1) NOT NULL DEFAULT '',
`descricao_imovel` text NOT NULL,
`motivo_imovel` varchar(200) DEFAULT '',
`valor_venda_imovel` decimal(10,2) DEFAULT NULL,
`oportunidade_imovel` char(1) NOT NULL DEFAULT '',
PRIMARY KEY (`id_imovel`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
Só aceita gravar, no maximo, 6 caracters antes da virgula.
Qualquer que seja o lenght do decimal ou float ou double (10,2), (20,2).....Qualquer um só aceita 6 dgitos antes do ponto.
MySQL 6.0.0
Está com prazo apertado?
Sugiro alterar o tipo para varchar e armazenas os números como strings...
Não. ta tranquilo de tempo.
Mas pensei assim(embora sei que meu pensamento esta errado):
Em minha região, dificilmente haverá um imóvel que passe de 999.000,00.
Então, deixei, provisoriamente até achar uma solução, como decimal(10,2).
Carcleo,
Você criou o campo preco_imovel com tamanho máximo de 8 caracteres, sendo que dois são decimais, então o que acontece:
Quando você tenta inserir um valor de: 123456789012.32 o banco de dados interpreta que são 14 posições, sendo que para aceitar você deverá ter um campo com tipo Decimal(14,2).
No seu caso, quando você diz que o campo será 8,2, você esta dizendo que serão aceitos oito números, e que destes oito, dois são decimais, restando então 6 posições para o valor inteiro.
Faça a alteração e tente a inserção novamente.
Espero ter lhe sido útil, grande abraço.
_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL
Eu fiz decimal(15,2)
Coloquei esse número: 1234567.88
E deu erro:
Out of range value for column 'preco_imovel'at row 1
Parece que ele só aceita que o mesmo numero de caracters esteja em todos os camposa.
Se eu colocar : 123456.88. Aí, ele aceita.
Poderia ser uma limitação da versão free do mysql server 6.0.0 talvez?
Só aceitar, no maximo, 6 casas antes do ponto, mesmo colcando, por exemplo: decimal(15,2)?
Olá Carcleo,
Simulei vossa alegação com o campo decimal(20,2)
Table valor
===========
valor_1, valor_2, valor_3, valor_4, valor_5
-----------
valor_1 decimal(3,2)
valor_2 decimal(4,2)
valor_3 decimal(5,2)
valor_4 decimal(6,2)
valor_5 decimal(20,2)
Inseri o valor citado:
insert into valor(valor_5)
values ('123456789012.32')
E o resultado foi:
NULL, NULL, NULL, NULL, '123456789012.32'
Ferramenta utilizada: MySQL Workbench
Se possível, posta a estrutura das tabelas caso realmente não conseguir.
Abraços.
_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL