我了解 MySQL 十进制数的内存存储要求(例如,DECIMAL(5,2) 需要 2 个字节用于 3 个整数,1 个字节用于小数。但我注意到小数也可以是有符号或无符号的。
对于诸如 TINYINT 之类的数字,范围会根据它是有符号(-128 到 127)还是无符号(0-255)而变化。那么我的问题是,如果小数是有符号的还是无符号的,小数的内存使用量是否会发生变化? -999.99 到 999.99 会使用与 000.00 到 999.99 相同的内存吗?
最佳答案
Would -999.99 to 999.99 use the same memory as 000.00 to 999.99?
简短回答:是的。
更长的答案:
- 小数点左边的数字和右边的数字都被认为是整数。
- 左边的有一个标志,但不占用任何额外空间。
- 每组(左边或右边)9 位数字适合 4 个字节;小于9占用ceil(N/2)个字节。
一个简单的经验法则:“DECIMAL(m,n)
占用 m/2
个字节。”它并不总是准确的,但非常接近。
我认为 DECIMAL 的最后一次重大变化是在 5.0.5 中。
关于MySQL 十进制内存使用情况(有符号 v 无符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32830125/