一:整型數據 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 ('王');