4

mysql docsのマニュアルの私の理解から、DECIMAL9桁の倍数ごとに4バイトが必要であり、残りの桁には次のバイトが必要であると記載されています。

number of digits leftover  |   bytes

0                          |   0
1                          |   1
2                          |   1
3                          |   2
4                          |   2
5                          |   3
6                          |   3
7                          |   4
8                          |   4

では、adecimal(12,6)は合計ストレージで6バイトに相当しますか?

ゼロが埋め込まれるため、小数部分は常に6桁になりますが、整数部分はそうではありませんDECIMAL(12,6)。列の場合、ストレージは行ごとまたは列定義で評価されますか?

    DECIMAL(12,6)
 1: 178.999999 // 3 digits for integer part so total would be 5 bytes?
 2: 0.880000 // 1 digits for integer part so total would be 4 bytes?
 3  123456.123456 // 6 digits would equal 6 bytes?

または、宣言された場合、常に6バイトになりますか(12,6)

編集

また、として宣言され(5,5)た小数は格納に6バイトかかり、として宣言された小数(12,6)も格納に6バイトかかります。ストレージサイズは問題ではないので、サイズの違いはmysqlが列を取得またはインデックス付けする方法に影響しますか?

4

2 に答える 2

3

MySQL 5.1(およびそれ以降)の場合、整数部分と小数部分のストレージを分割し、可能な限り最大の数のストレージ用のスペースを確保します。したがって、DECIMAL(12,6)の場合、整数部分に3バイト、小数部分に3バイトが必要です。値に基づいてストレージが減少するようには見えません。値が何であれ、メモリを脇に置きます。

ここでドキュメントをチェックできます:

MySQLDecimalのマニュアルページ

于 2012-06-13T00:13:44.950 に答える
3
DECIMAL(12,6)

1:178.999999 //整数部分の場合は3桁なので、合計は5バイトになります(正しい)2:0.880000 //整数部分の場合は1桁なので、合計は4バイトになりますか?(間違っています)3 123456.123456 // 6桁は6バイトになりますか? (正しい)

説明:残りの桁のバイト数00

1 1

2 1

3 2

4 2

5 3

6 3

7 4

8 4

9の倍数はすべて4バイトを含みます

したがって、0.880000は整数部分に0を取り、小数部分に3を取ります。したがって、0 + 3 = 3

于 2014-09-12T13:48:22.393 に答える