mysql支持很多字段類型,包括數值類型、日期/時間類型和字符串(字符)類型;在使用時需要考慮到存儲空間,存儲效率;
幾種列類型描述使用了下述慣例:
· M
表示最大顯示寬度。最大有效顯示寬度是255。
· D
時間類型:datetime(8bytes),timestamp(4bytes)
字符類型:
VARCHAR(M),L+1個字節,其中L<= M且0 <=M<= 65535,不宜把M設置得過大,因為在內存中會計算實際長度,這個計算時需要消耗資源的;
CHAR(M)M個字節,0 <= M<= 255
BINARY(M),M個字節,0 <= M <= 255
VARBINARY(M),L+1個字節,其中L <= M且0<= M <= 255
ENUM('value1','value2',...),1或2個字節,取決於枚舉值的個數(最多65,535個值),調整比較復雜,需要先drop在create;在枚舉值小於255時,占1個字節,大於255時占2個字節;
SET('value1','value2',...)1、2、3、4或者8個字節,取決於set成員的數目(最多64個成員),1-8占1個字節,9-16占2個字節,17-24占3個字節,25-32占4個字節,33-64占8個字節;
整型類型:
tinyint(8),一個字節
smallint(16),2個字節
mediumint(24),3個字節
int(32),4個字節
bigint(64),8個字節
實型類型:
float(4bytes)
Float(M,D) 單精度浮點型,精確到小數點後面6位,雙精度double(M,D)精確到小數點後面13位;
float 內存如何存儲
類型
存儲位數
總位數
偏移值
數符(S)
階碼(E)
尾數(M)
(offset)
短實數(float)
1
8
23
32
127
長實數(double)
1
11
52
64
1023
Float怎麼存儲
N (10) = 123.456,
換算成二進制表示:
N (2) = 1111011. 01110100101111001
= 1. 11101101110100101111001(...) * 2^6
那麼 E = 127 + 6 = 133(10) = 10000101(2)
M = 111 0110 1110 1001 0111 1001 (省略了最高數字位1, 共23bit)
組合起來就是:
S E M
0 10000101 111 0110 1110 1001 0111 1001
整型類型:
Decimal(M,D)占M+2個字節,小數點和符號需要
各自占一個字節;
DECIMAL 可能的最大取值范圍與DOUBLE 一樣
,但是其有效的取值范圍由M 和D 的值決定,存蓄
的方式是字符串;
Decimal(M,D)占M+2個字節,小數點和符號需要各自占一個字節;
DECIMAL 可能的最大取值范圍與DOUBLE 一樣,但是其有效的取值范圍由M 和D 的值決定,存蓄的方式是字符串;