<p>I'm using a decimal column to store money values on a database, and today I was wondering what precision and scale to use.</p>

<p>Since supposedly char columns of a fixed width are more efficient, I was thinking the same could be true for decimal columns. Is it?</p>

<p>And what precision and scale should I use? I was thinking precision 24/8. Is that overkill, not enough or ok?</p>

<hr>

<p>This is what I've decided to do:</p>

<ul>
<li>Store the conversion rates (when applicable) in the transaction table itself, as a float</li>
<li>Store the currency in the account table</li>
<li>The transaction amount will be a <code>DECIMAL(19,4)</code></li>
<li>All calculations using a conversion rate will be handled by my application so I keep control of rounding issues</li>
</ul>

<p>I don't think a float for the conversion rate is an issue, since it's mostly for reference, and I'll be casting it to a decimal anyway.</p>

<p>Thank you all for your valuable input.</p>

The money datatype on SQL Server has four digits after the decimal.
From SQL Server 2000 Books Online:
Monetary data represents positive or negative amounts of money. In Microsoft® SQL Server™ 2000, monetary data is stored using the money and smallmoney data types. Monetary data can be stored to an accuracy of four decimal places. Use the money data type to store values in the range from -922,337,203,685,477.5808 through +922,337,203,685,477.5807 (requires 8 bytes to store a value). Use the smallmoney data type to store values in the range from -214,748.3648 through 214,748.3647 (requires 4 bytes to store a value). If a greater number of decimal places are required, use the decimal data type instead.