Mysql的數據類型

一:整型數據
	tinyint:1 byte
	smallint 2 byte
	mediumint: 3 byte
	int: 4 byte
	big: 8 byte
	這裏詳解tinyint,其他幾種和它的用法類似。
	tinyint 無符號表示範圍:0-255,有符號表示範圍:-128-127
	1、 三個修飾的可選屬性:tinyint(M) unsigned zerofill
		(M):寬度(在0填充時纔有意義)
		unsigned:無符號(要是不寫,默認是有符號的)eg:age tinyint unsigned
		zerofill:0填充(默認無符號)
	2、當不填充數據時,推薦使用設置默認值。因爲不設置時,沒數據時會默認null,但null不好
	   比較(比較null的語句爲select x is null。返回值1表示是)。eg:not null default 0
	3、添加一個新列
		// 添加age列到表msg中,列是tinyint型,5位0填充,默認值爲0
		eg: alter table msg add age tinyint(5) zerofill not null default 0;
		
二:小數型數據
	float(M, D) 浮點型小數
	decimal(M, D) 定點型小數
	M:表示小數的總位數,不包括小數點
	D:小數的位數
	eg:float(6, 2) 表示數的範圍爲:-9999.99 —— +9999.99
	   float(6, 2) unsigned 表示範圍爲: 0.00 —— +9999.99(與整型的無符號表示有點區別)
	float和deciaml的區別在於,後者表示的數據更精確。
	eg: alter table msg add age float(6, 2) zerofill not null default 0.0;
	這裏要注意一下,0填充爲:000.00 加小數點一共6位。
	
三:字符型數據
	char 		定長字符串		char(M) 		0	<= M <=	255
	varchar 	變長字符串		varchar(M)		0	<= M <=	65535
	text  		文本串			text 			存2萬到6萬個字符
	char與varchar的區別:
	1、存儲範圍不同
		上面的M代表存放字符的個數,如char(8)表示可以存放8個字符(注意:'a','王',
		前者佔一個字節,後者佔兩個字節,但都只算一個字符)。varchar與char有點區別,
		它最多存放65535個字節的數據,由於一個utf8數據佔3個字節,因此存放utf8的字符
		大約是兩萬個,這就是text爲什麼存放數據爲2萬到6萬。
	2、空間利用率不同
		char是定長的:申請M個空間,實存N個空間,當N<M時還是佔用M個空間
		varchar是變長的:申請M個空間,實存N個空間,當N<M時佔用N+2byte個空間
		(2byte用來表示實際存儲長度)
	3、對末尾空格的處理不同
		我們知道,char當實際存儲空間小於申請空間時,剩下的空間用空格填充。
		因此當數據的末尾是空格時,char型存儲會把空格當填充數據處理
		因此會導致數據的丟失。varchar就不會出現這種情況。
	4、定長的char型雖然有時候浪費空間,存儲、讀取速度快。
		
	text是文本類型,可以存比較大的文本段,但收索速度較慢,如果文本不是特別長
	建議用char或者varchar代替還有就是text不用加默認值,加了也沒用。


四:時間類型:
	1、year類型:典型格式:1994	表示範圍:1901——2155 注意:0000表示錯誤的選擇
		當輸入兩位數時:00——69表示:2000年到2069年
						70——99表示:1970年到1999年
	2、date類型:典型格式:1949-10-01	表示範圍:1000-01-01——9999-12-31
	3、time類型:典型格式:12:12:12		表示範圍:-838:59:59——+838:59:59
	4、datetime類型:典型格式:1949-10-01 12:12:12		
					表示範圍:1000-01-01 00:00:00 —— 9999-12-31 23:59:59
	
	時間戳:表示1970-01-01 00:00:00 到當前時刻的秒數。
	datetime類型表示時間雖然便於我們觀察,但不便於計算機的運算,因此一般存儲註冊時間、
	商品發佈時間等使用int來記錄時間戳,這樣既便於計算機運算,又便於轉換成易於觀察的格式。
	
	
	小知識點:
	1、在一條語句前面加入#號表示,該行爲註釋。eg: #時間類型:
	2、關於enum枚舉類型。它是字符類型中的一種,但不太符合數據庫的設計原則
		eg:
		// 插入時數據要麼爲'男', 要麼爲'女'
		create table gender(
		
			gender enum('男', '女')
		);
		// 正確(注意插入時不加列選項,表示插入所有列)
		insert into gender
		values
		('男');
		// 錯誤
		insert into gender
		values
		('王');
	
	
	
	
	
	
	
	

發佈了44 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章