Valor monetário no MySql

Tenho um “sisteminha” em c# e uma tabela com um valor monetário, coloquei no MySQL o tipo DOUBLE, onde os valores possíveis inseridos vão até R$10.000,00 (é o máximo que meu sistema permite). Porém, ao inserir qualquer valor, aparece o erro

Data truncated for column ‘valor’ at row 1

Tentei trocar para decimal (10,2) mas também não deu.

Data truncated = dados truncados.
Em matemática e ciência da computação, o truncamento é a limitação do número de dígitos à direita da vírgula decimal. Ou seja, está acontecendo alguma coisa nos seus campos decimais :thinking:

1 curtida

não se grava no banco os pontos. tu tem que remover os pontos antes de gravar.

2 curtidas

Excelente colocação! Lembrando que ponto é o que seria a nossa vírgula. Na maior parte do mundo, onde nós usamos o ponto na verdade é virgula. Então o sistema está pegando na verdade R$10,00000, como se fossem 5 casas decimais. Tente salvar como R$10000.00.

1 curtida

Muito obrigada aos dois.
Então, em resumo, eu preciso tirar o ponto do milhar e substituir a virgula do decimal por ponto?
Fazendo com o @smatt falou, eu posso deixar o tipo no banco como Decimal(10,2) (o que está agora) e vai funcionar de boas?

Faça o teste :wink:

Para indicar casa decimal, usa-se o ponto e não a vírgula. Então em vez de ser 10.000,00 você salva como 10000.00. Onde usamos o ponto para indicar mil, milhares etc, não se usa no MySQL. E onde usamos virgula para indicar decimal, troque pelo ponto.

Vamos corrigir isso: não se grava as máscaras, nem para valores monetários (R$ 15.000,00), nem para documentos (123.456.789-00), datas (20/11/2018), CEP (20.070-333) ou qualquer coisa que tenha um padrão para exibição.
Agora, quando falamos em pontos, precisamos ser cautelosos:

R$ 15.205,22

Salvo como 15205.22 (Olha o ponto ali)

1 curtida