資料型別是指列、儲存過程引數、表示式和區域性變數的資料特徵,它決定了資料的儲存格式,代表了不同的資訊型別。
有一些資料是要儲存為數字的,數字當中有些是要儲存為整數、小數、日期型等...
mysql支援多種型別,大致可以分為四類:數值型、浮點型、日期/時間和字串(字元)型別。
一、text 型別(字元型別):
char(size):儲存固定長度的字串(可包含字母、數字以及特殊字元)
varchar(size):儲存可變長度的字串(可包含字母、數字以及特殊字元)
text:存放最大長度為 65,535 個字元的字串。
1.1 字元與位元組的區別
乙個字元由於所使用的字符集的不同,會並儲存在乙個或多個位元組中,所以乙個字元占用多少個位元組取決於所使用的字符集。
注意:char與varchar後面接的資料大小為儲存的字元數,而不是位元組數
在mysql中,char、varchar和text型別的字段都可以用來儲存字元型別的資料,char、varchar都可以指定最大的字元長度,但text不可以。
它們的儲存方式和資料的檢索方式也都不一樣。
資料的檢索效率是:char > varchar > text
1.2 存資料時的區別
char:char定義的是固定長度,長度範圍為0-255,儲存定長資料很方便,char欄位上的索引效率級高,必須在括號裡定義長度,可以有預設值,比如定義char(10),那麼不論你儲存的資料是否達到了10個位元組,都要占去10個位元組的空間(自動用空格填充),且在檢索的時候後面的空格會隱藏掉,所以檢索出來的資料不需要記得用什麼trim之類的函式去過濾空格。
varchar:varchar是變長長度,長度範圍為0-65535,但儲存效率沒有char高,必須在括號裡定義長度,可以有預設值。儲存資料的時候,不進行空格自動填充,而且如果資料存在空格時,當值儲存和檢索時尾部的空格仍會保留。另外,varchar型別的實際長度是它的值的實際長度+1,這乙個位元組用於儲存實際使用了多大的長度。
text:儲存可變長度的非unicode資料,最大長度為2^31-1個字元。text列不能有預設值,儲存或檢索過程中,不存在大小寫轉換,後面如果指定長度,不會報錯誤,但是這個長度是不起作用的,意思就是你插入資料的時候,超過你指定的長度還是可以正常插入。
1.3 取資料時的區別
資料庫取char的資料時,會把後面的空格全部丟棄掉,也就是說,在char中的尾部存入空格時,最後取出來都會被丟棄;當然指定pad_char_to_full_length時,在取資料時讓尾部的空格保留。
而資料庫在取varchar資料時,尾部空格會保留。
可以用上表來表示,當定義char時,不管你存入多少字元,都會占用到你定義的字元數,而用varchar時,則和你輸入的字元數有關,會多一到兩個位元組來記錄位元組長度,當資料位占用的位元組數小於255時,用1個位元組來記錄長度,資料位占用位元組數大於255時,用2個位元組來記錄長度,還有一位來記錄是否為nul值。
1.4 關於儲存空間:
在使用utf8字符集的時候,mysql手冊上是這樣描述的:
基本拉丁字母、數字和標點符號使用乙個位元組;
大多數的歐洲和中東手寫字母適合兩個位元組序列:擴充套件的拉丁字母(包括發音符號、長音符號、重音符號、低音符號和其它音符)、西里爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言;
韓語、中文和日本象形文本使用三個位元組序列。
mysql每一行的最大位元組數為65535,當你使用utf8,乙個字元有可能占用三個位元組的時候,varchar如果定義允許空的話能定義的最大長度為(65535-1-2)/3=21844.
mysql在對比char,varchar,text型別的資料時,是不會把尾部的空格考慮在內的,這對所有字符集都適用,但在這裡是除了like比較符的。
1.5 結論:
1、經常變化的字段用varchar;
2、知道固定長度的用char;
3、超過255位元組的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能夠用數字型別的字段盡量選擇數字型別而不用字串型別,這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連線回逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了;
二、number 型別(數字型別):
tinyint(3):-128 到127常規。0到255無符號*。在括號中規定最大位數。
smallint(3):-32768到32767常規。0到65535無符號*。在括號中規定最大位數。
mediumint(3):-8388608到8388607普通。0to16777215無符號*。在括號中規定最大位數。
int(3):-2147483648到2147483647常規。0到4294967295無符號*。在括號中規定最大位數。
bigint(10):-9223372036854775808到9223372036854775807 常規。0到18446744073709551615無符號*。在括號中規定最大位數。
float(size,d)):帶有浮動小數點的小數字。在括號中規定最大位數。在d引數中規定小數點右側的最大位數。
double(size,d):帶有浮動小數點的大數字。在括號中規定最大位數。在d引數中規定小數點右側的最大位數。
decimal(size,d):作為字串儲存的double型別,允許固定的小數點。
三、date 型別(日期型別):
date():日期格式:yyyy-mm-dd;注釋:支援的範圍是從 '1000-01-01' 到 '9999-12-31'
datetime():日期和時間的組合。格式:yyyy-mm-dd hh:mm:ss;注釋:支援的範圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
timestamp():時間戳。timestamp 值使用 unix 紀元('1970-01-01 00:00:00' utc) 至今的描述來儲存。格式:yyyy-mm-dd hh:mm:ss;注釋:支援的範圍是從 '1970-01-01 00:00:01' utc 到 '2038-01-09 03:14:07' utc
time():時間格式:hh:mm:ss 注釋:支援的範圍是從 '-838:59:59' 到 '838:59:59'
year():2位或4位格式的年。注釋:4位格式所允許的值:1901到2155;2位格式所允許的值:70到69,表示從1970到2069。
4、blob (binary large object),用來儲存二進位製大物件的字段型別。字段型別 最大長度(位元組) 儲存需求
tinyblob 255 值的長度加上用於記錄長度的1個位元組(8位)
blob 65k 值的長度加上用於記錄長度的2個位元組(16位)
mediumblob 16m 值的長度加上用於記錄長度的3個位元組(24位)
longblob 4g 值的長度加上用於記錄長度的4個位元組(32位)
(二)MySQL資料庫 MySQL 常用資料型別
我的系統版本為centos7.5,mysql版本為5.7.26 mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。整數的資料型別能儲存的範圍不受引數的限制,例如int 1 和int 10 儲存的範圍是一樣的。型別大小 範圍 有符號 範圍 無符號 用途tinyint 1 位...
資料庫常用資料型別
資料型別 在sql中域的概念用資料型別來實現。定義表的各個屬性時需要指明其資料型別及長度。sql標準支援多種資料型別。以下是幾種常用的資料型別。資料型別 含義char n character n 長度為n的定長字串 varchar n charactervarying n 最大長度為n的變長字串 c...
資料庫常用資料型別
型別大小範圍 有符號 範圍 無符號 用途 tinyint 1 位元組 128,127 0,255 極小整數值 smallint 2 位元組 32 768,32 767 0,65 535 小整數值 mediumint 3 位元組 8 388 608,8 388 607 0,16 777 215 中等整...