標籤:
字串類型
在SQL中,講字串類型分成了六類:char,varchar,text,blob,enum,set
char,定長字串
磁碟(二維表)在定義結構的時候,就已經確定了最終資料的儲存長度。
char(L):L代表length,可以儲存長度,單位為字元。最大長度值為255.
varchar變長字串
在分配空間的時候,按照最大的空間分配,但是實際上最終用了多少空間,是根據具體的資料來確定的。
varchar(L):L表示字元長度,理論長度是65536個字元,但是會多出1到2個位元組來確定儲存的實際長度。
例如,varchar(10):存了10個漢字,utf8環境下,10*3+1=31個位元組。
儲存3個漢字,3*3+1 = 10(bytes)
如何選擇定長或則是變長字串呢?
第一,定長的磁碟空間比較浪費,但是效率高。如果資料基本上確定長度都一樣,就是用定長。
第二,變長比較節約磁碟空間,但是效率低。如果資料不能確定長度,可以採用。
text,文本字串
如果資料量非常大,通常說超過255個字元,就使用文本字串。
文本字串根據儲存的資料的格式進行分類:text OR blob.
Text:儲存文字(位元據根據實際都是儲存路徑)
Blob:儲存位元據(通常不用)。
enum,枚舉字串
事先將所有可能出現的結果都設計好,實際上儲存的資料必須是規定好的資料中的一個。
枚舉的使用方式:
定義:enum(可能出現的元素列表); -- 如 enum(‘男‘,‘女‘,‘妖‘,‘保密‘);
使用:儲存資料,只能儲存上面定義好的資料。
作用:1、規範資料格式,資料只能是規定的資料中的其中一個。枚舉實際儲存的是數值二不是字串本身。
2、節省儲存空間(枚舉通常有一個別名:單選框)
在MYSQL中,系統是自動轉換資料格式的,而且基本與PHP一樣。
枚舉的原理:枚舉在進行資料規範的時候(定義資料的時候),系統會自動建立一個資料與枚舉元素的對應關係(關係放到日誌中),然後在進行資料插入的時候,系統自動將字元轉換成對應的數字儲存,分然後進行資料提取的時候,系統自動將數值轉換成對應的字串顯示。
集合字串
集合和枚舉類似:實際儲存的是數值,而不是字串(集合是多選)。
定義:Set (元素列表)
使用:可以使用元素列表中的元素(多個),使用逗號分隔。
集合中沒有一個元素。
集合的強大在於能夠規劃資料和節省空間的,php也可以規範資料,但對於PHP來說效率優先,而且資料的維護可以通過數字進行。PHP沒有辦法判斷資料的在資料庫的形式,集合增加PHP的維護成。
MYSQL記錄長度
MYSQL中規定,任何一條記錄最長不能超過65535個位元組。
MYSQL記錄中:如果有任何一個欄位允許為空白,那麼系統會自動從整個記錄中保留一個位元組來儲存NULL。
列屬性
列屬性: 真正限制欄位的是資料類型,但是資料類型的約束很單一,需要有一些額外的約束,來保證資料的合法性。
列屬性有很多: NULL/NOT NULL , DEFAULT,PRIMARY KEY,UNIQUE KEY,AUTO_INCREMENT,COMMENT.
空屬性:兩個值,NULL(空,預設值)和NOT NULL(不為空白)
列描述: comment,描述,沒有實際含義,是專門用來描述欄位。
DEFAULT:預設值關堅詞。
MYSQL基礎筆記(七)- 資料類型二