mysql資料型別小結

myownstars發表於2012-12-24

mysql的資料型別總體分為3大類:數字/日期/字串

 

數字型別

--支援unsigned的同時也支援signed,如果為某列指定zerofill,則為unsigned型別

Bit—範圍1-64,預設為1

Tinyint—signed範圍-128 – 127 unsigned範圍0 – 255

Bool – tinyint(1)同義,0代表False/0代表true,但true只與1同價;

Smallint – signed範圍-32768 – 32767unsigned0 – 65535

Mediumint – signed範圍-8388608 – 8388607unsigned0 – 16777215

Int – signed範圍-2147483648 – 2147483647unsigned0 – 4294967295

Bigint – signed範圍-9223372036854775808 – 9223372036854775807(63)unsigned範圍0 -- 18446744073709551615

--對於bigint型別,所有計算都是透過signed bigintdouble完成的,除非使用bit函式,unsigned big不要超過63位,否則其後的資料可能會在bigint轉化為double時丟失

Decimal[(M[,D])] –M最大65預設為10D最大30預設為0

Float[(M,D)]—單精度浮點數,理論取值範圍-3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38,具體的因OS和硬體而異

Double[(M,D)] --理論取值範圍 -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308

Type

Storage

Minimum Value

Maximum Value

 

(Bytes)

(Signed/Unsigned)

Signed/Unsigned)

TINYINT

1

-128

127

 

 

0

255

SMALLINT

2

-32768

32767

 

 

0

65535

MEDIUMINT

3

-8388608

8388607

 

 

0

16777215

INT

4

-2147483648

2147483647

 

 

0

4294967295

BIGINT

8

-9223372036854775808

9223372036854775807

0

18446744073709551615

 

 

 

日期型別

Date – 範圍’1000-01-01’ -- ’9999-12-31’,可以為之賦值字串和數值

Datetime – 範圍’1000-01-01 00:00:00’ – ‘9999-12-31 23:59:59’,可以為之賦值字串和數值

Timestamp –範圍’1970-01-01 00:00:01’ UTC – ‘2038-01-19 03:14:07’ UTC,儲存自’1970-01-01 00:00:00’至某一時間點的秒數;

預設情況下,表的第一個timestamp列記錄該表最近更新時間,即最近一次insert/update操作時間;除非timestamp列定義允許null值,否則為其賦值null則會轉變為當前時間;

mysql開啟maxdb執行模式,則timestampdatatime為同一型別;

Time – 範圍’-838:59:59’ – ‘838:59:59’,可以為之賦值字串和數值

Year[(2|4)] – 4位範圍’1901’ – ‘2155’2位範圍’70’ – ‘69’ (1970 -- 2069)

 

datetime佔用8個位元組,而timestamp只佔用4個位元組;

另外,timestamp建表是可以設定預設值,且在更新表示該列會自動更新為當前時間;
year佔用1個位元組,定義時可為year(4)/year(2),兩者顯示年份不同;
time佔用3位元組,可以儲存時間間隔

 

字串型別

Char –固定長度字串,最大255/預設為1char(0)只佔用1bit可儲存兩個不同的值,Null或空白字串;最後的空白鍵自動被回收;

Varchar—variable-length,最大長度65535(mysql每行最大限度為65535位元組);使用12個位元組字首儲存該列長度;

Binary –類似char,以二進位制位元組儲存;

Varbinary –類似varchar,二進位制位元組儲存;

Tinyblob –最大長度255位元組,使用1位元組字首儲存實際位元組數;

Tinytext –最大為255字元,如果使用多位元組字符集則長度更少;使用1位元組字首儲存實際位元組數;

Blob –最大長度65536位元組;使用2位元組字首儲存實際位元組數;

Text --最大長度65536字元;使用2位元組字首儲存實際位元組數;

Mediumblob –最大長度power(2,24) -1位元組,使用3位元組字首儲存實際位元組數;

Mediumtext--最大長度power(2,24) -1字元,使用3位元組字首儲存實際位元組數;

Longblob --最大長度power(2,32) -1位元組,使用4位元組字首儲存實際位元組數;

Longtext --最大長度power(2,32) -1字元,使用4位元組字首儲存實際位元組數;

Enum(‘val1’,’val2’,..) –一個字串物件只能包含其中一個值:val1/val2/null或者’’;最多可包含65536個不同值,內部使用整數標註;

Set(‘val1’,’val2’,..) --一個字串物件可包含0或多個值;最多可包含64個成員,內部使用整數標註;

 

 

儘量列宣告為not null,這樣每次處理時不必先檢查其是否為NULL,還可以節約1bit的儲存空間;
如果字串資料列候選值數量有限,應該使用ENUM型別,使用一系列數值儲存,操作速度快;

同時可將IPV4以number型別儲存,字串需要15位元組而現在只需4位元組

呼叫如下函式進行轉換
mysql> SELECT INET_ATON('10.0.5.9');
        -> 167773449
mysql> SELECT INET_NTOA(167773449);
        -> '10.0.5.9'

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-751573/,如需轉載,請註明出處,否則將追究法律責任。

相關文章