Qual é o melhor tipo de dados SQL para valores de moeda? Estou usando o MySQL, mas prefere um tipo independente de banco de dados.
mysql
sql
sqldatatypes
Brian Fisher
fonte
fonte
Respostas:
Algo como
Decimal(19,4)
geralmente funciona muito bem na maioria dos casos. Você pode ajustar a escala e a precisão para atender às necessidades dos números que você precisa armazenar. Mesmo no SQL Server, costumo não usar "money
" por não ser padrão.fonte
(19,4)
vez de(19,2)
?A única coisa que você deve observar é que, se você migrar de um banco de dados para outro, poderá achar que DECIMAL (19,4) e DECIMAL (19,4) significam coisas diferentes
( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )
fonte
Também é importante calcular quantas casas decimais talvez sejam necessárias para seus cálculos.
Trabalhei em um aplicativo de preço de ações que exigia o cálculo do preço de um milhão de ações. O preço da ação cotado teve que ser armazenado com 7 dígitos de precisão.
fonte
A resposta de Assaf de
parece irreverente, mas na verdade é pertinente.
Só hoje tivemos um problema em que um registro falhou ao ser inserido em nossa tabela de taxas, porque uma das colunas (GrossRate) está definida como Decimal (11,4) e nosso departamento de produtos conseguiu um contrato para quartos em algum resort incrível em Bora Bora, que é vendida por vários milhões de francos do Pacífico por noite ... algo que nunca foi antecipado quando o esquema do banco de dados foi projetado 10 anos atrás.
fonte
Para aplicativos de contabilidade, é muito comum armazenar os valores como números inteiros (alguns chegam a dizer que é o único caminho). Para ter uma idéia, calcule o valor das transações (suponha $ 100,23) e multiplique por 100, 1000, 10000 etc. para obter a precisão necessária. Portanto, se você precisar armazenar apenas centavos e puder arredondar para cima ou para baixo com segurança, basta multiplicar por 100. No meu exemplo, isso tornaria 10023 o número inteiro a ser armazenado. Você economizará espaço no banco de dados e comparar dois números inteiros é muito mais fácil do que comparar dois carros alegóricos. Meus US $ 0,02.
fonte
DECIMAL
? Você precisaria ter muito cuidado para sempre converter moedas de um centavo, moinhos ou millrays em dólares, nos momentos apropriados.entrada super tardia, mas o GAAP é uma boa regra geral.
Fonte: Melhor tipo de dados para armazenar valor monetário no MySQL
fonte
Você pode usar algo como
DECIMAL(19,2)
por padrão para todos os seus valores monetários, mas se você apenas armazenar valores inferiores a US $ 1.000, isso será apenas um desperdício de espaço valioso no banco de dados.Para a maioria das implementações,
DECIMAL(N,2)
seria suficiente, onde o valor deN
é pelo menos o número de dígitos antes.
da maior soma que você espera que seja armazenada nesse campo+ 5
. Portanto, se você nunca espera armazenar valores maiores que 999999.99,DECIMAL(11,2)
deve ser mais do que suficiente (até as expectativas mudarem).Se você deseja ser compatível com GAAP , pode ir com
DECIMAL(N,4)
, onde o valor deN
é pelo menos o número de dígitos antes.
da maior soma que você espera que seja armazenada nesse campo+ 7
.fonte
Depende da natureza dos dados. Você precisa contemplar isso de antemão.
O meu caso
Por que (M, 4)?
Troca
Extreme Compatível
Embora o MySQL permita que você use decimal (65,30), 31 para escala e 30 para precisão parecem ser nossos limites se quisermos deixar a opção de transferência em aberto.
Escala e precisão máximas nos RDBMS mais comuns:
6 , 7 , 8 , 9
Extrema razoável
Nós tendemos a dizer "sim, claro ... eu não vou precisar dessas figuras malucas". Bem, os zimbabuenses costumavam dizer isso também. Não faz muito tempo.
Vamos imaginar que você precise registrar uma transação de US $ 1 milhão em dólares do Zimbábue (talvez hoje improvável hoje, mas quem sabe como será isso daqui a 10 anos?).
fonte
Embora isso possa ser tarde, mas será útil para outra pessoa. Da minha experiência e pesquisa, vim a conhecer e aceitar decimal (19, 6). Isso é quando se trabalha com php e mysql. ao trabalhar com grande quantidade de dinheiro e taxa de câmbio
fonte