上面说:
十进制(和数字)列的值使用二进制格式表示,该格式将九个十进制(以10为基数)数字压缩为四个字节。每个值的整数部分和小数部分的存储分别确定。每9位数字的倍数需要4个字节,“剩余”的数字需要4个字节的一部分。下表给出了多余数字所需的存储空间:
+----------------------------------+
|Leftover Digits | Number of Bytes |
+----------------------------------+
| 0 | 0 |
+----------------------------------+
| 1 | 1 |
+----------------------------------+
| 2 | 1 |
+----------------------------------+
| 3 | 2 |
+----------------------------------+
| 4 | 2 |
+----------------------------------+
| 5 | 3 |
+----------------------------------+
| 6 | 3 |
+----------------------------------+
| 7 | 4 |
+----------------------------------+
| 8 | 4 |
+----------------------------------+
我的问题是,如果小数点两边的数字都小于9,它还会占用4个字节还是会被认为是“剩菜”?
最佳答案
我使用MyISAM
表进行了一些测量,在将一些列添加到六行数据之后,通过比较表dec.MYD
的文件大小来获得答案。我得到的是:
Original:
-rw-rw----. 1 mysql mysql 54 Dec 17 18:49 dec.MYD
Add one column of DECIMAL(2,1):
-rw-rw----. 1 mysql mysql 66 Dec 17 18:51 dec.MYD
Further add one column of DECIMAL(4,1):
-rw-rw----. 1 mysql mysql 84 Dec 17 18:51 dec.MYD
结论是:
DECIMAL(2,1) requires (66-54)/6 = 2 bytes in total
DECIMAL(4,1) requires (84-66)/6 = 3 bytes in total
注意,测试并不是那么直接,因为第一列似乎总是7字节,不管它是
DECIMAL(2,1)
还是INT
。您需要添加更多列来重现上述结果。关于mysql - Decimal(2,1)的存储要求是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8543488/