1. 程式人生 > >MySQL欄位資料型別

MySQL欄位資料型別

欄位是列表中 的列名,列是表的重要組成部分,MySQL資料庫中,列中的每一個數據都需要指定其所屬型別,以確保資料的準確性和系統 的穩定性。
欄位資料型別分為三類:數值型別、字串型別、時間日期型別。
數值型:
整數:
tinyint(1byte --> -128 —— 127 ) tinyint unsigned( 0 – 255 )
smallint(2B–> -32768~32767)smallintunsigned(0 – 65535)
int(4byte --> -2^31 – 2^31-1 ),
bigint(8byte)
浮點數:
decimal( 64位 )比float( 4B) 的精度更大,float存在精度缺失。
double(8B)
decimal( m,n )
float( m,n ):m表示總長度,n表示小數位數
eg:float(4,2) -99.99 — 99.99
float(4,2) unsigned 0 – 99.99
字串型別:


一箇中文字和一個英文字母都表示一個字元。
char(M):定長字串,M 最大值為 255,單位為字元
varchar(M):非定長字串 M最大值為65532,mysql規定一行長度不超過65535個位元組,其中 1 – 3 個位元組用來描述字串長度
定長字串檢索效率高,空間利用率低;(身份證號,手機號,銀行卡號等欄位)
變長字串檢索效率低,空間利用率高(姓名一般定義為20,地址等欄位)
text:大文字
時間型別:
DATE:日期型別 yyyy-mm-dd : 年 月 日 3位元組
DATETIME : 日期型別 YYYY-MM-DD HH:mm:ss 年月日時分秒 8位元組
TIMESTAMP:時間戳 日期型別 YYYY-MM-DD HH:mm:ss 4位元組
每當有資料的插入或更新時,自動填充當前時間,無需使用者插入
從1970-1-1 00:00:01開始到現在經過的秒數
複合型別:

列舉:ENUM 表示單選
enum(’選項1’,’選項2’,’選項3’…),最終只儲存其中具體某一項
集合:SET
set(’選項1’,’選項2’,’選項3’…) 最終可儲存多個選項
檢索set集合指定的選項 find_in_set(’要查詢的選項’,set集合)
eg: select * from [table_name] where find_in_set(’睡覺’,[set_name]);

關於varchar(len),len到底是多大,這個len值,和表的編碼密切相關:
varchar長度可以指定為0到65535之間的值,但是有1 - 3 個位元組用於記錄資料大小,所以說有效位元組數是 65532。 當我們的表的編碼是utf8時,varchar(n)的引數n最大值是65532/3=21844[因為utf中,一個字元佔用3個字 節],如果編碼是gbk,varchar(n)的引數n最大是65532/2=32766(因為gbk中,一個字元佔用2位元組)。
char和varchar的區別:


char 適合長度固定的資料
如果資料長度有變化,就使用變長(varchar),
定長的磁碟空間比較浪費,但是效率高。
變長的磁碟空間比較節省,但是效率低。