Database学习 - mysql数据类型
MySQL數據類型
可以被分為3類:
1.整型,數值類型
2.日期和時間類型
3.字符串(字符)類型
?
整型(INT)
| 數據類型 | 大小 | M (默認值) | 范圍(有符號) | 范圍(無符號) | 用途 |
| tinyint?[(M)] [UNSIGNED] [ZEROFILL] | 1字節 | 4 | -128~127? (-27~27-1) | 0 ~ 255 (0 ~ 28-1) | 非常小整數值 |
| smallint?[(M)] [UNSIGNED] [ZEROFILL] | 2字節 | 6 | -32768~32767(-215?~ 215-1) | 0 ~ 65535 (0 ~ 216-1) | ?較小整數 |
| mediumint?[(M)] [UNSIGNED] [ZEROFILL] | 3字節 | 9 | -8388608 ~ 8388607 (-223?~ 223-1) | 0 ~ 16777215 (0 ~ 224-1) | ?中等大小整數 |
| int?[(M)] [UNSIGNED] [ZEROFILL] | 4字節? | 11 | -2147483648 ~ 2147483647(-231?~ 231-1) | 0 ~ 4294967295 (0 ~ 232-1) | ?標準整數 |
| integer?[(M)] [UNSIGNED] [ZEROFILL] | 4字節? | 11 | -2147483648 ~ 2147483647(-231?~ 231-1) | 0 ~ 4294967295 (0 ~ 232-1) | 和int相同 |
| bigint?[(M)] [UNSIGNED] [ZEROFILL] | 8字節 | 20 | -9223372036854775808 ~9223372036854775807 (-263?~ 263-1) | 0 ~ 18446744073709551615 (0 ~ 264-1) | ?較大整數 |
注:取值范圍如果加了unsigned,則最大值翻倍,如tinyint unsigned的取值范圍為(0~256)。
?
? 方括號(“[”和“]”)指出可選的類型修飾符的部分
? M?:指出最大的顯示尺寸。最大的合法的顯示尺寸是 255 。?在MySQL中創建整型字段INT(或其它像tinyint)時,可以設定該字段的位數。如int(11),int(5),如果不指定位數,INT型默認長度為11。字段插入長度與int設定的M無關,當插入長度大于設定的M時,字段值不會被截斷,還是按照類型的實際精度進行保存。
?? D?:適用于浮點類型并且指出跟隨在十進制小數點后的數碼的數量。最大可能的值是30,但是應該不大于M-2。
? ZEROFILL:?填零,即在數字長度不夠的數據前面填充0,以達到設定的長度,MySQL中字段設置為該屬性時,將為該列自動地增加UNSIGNED屬性.整型字段有個ZEROFILL屬性,在數字長度不夠的數據前面填充0,以達到設定的長度。M值只當屬性為ZEROFILL時,才有區別效果。如表結構為id1 int(10) ,id2 int(5),對應數據為? 第一行為(1,1),第二行為(1111111,1111111),當id1,id2字段設置為ZEROFILL屬性時,顯示數據為第一行為(0000000001,00001),第二行為(0001111111,1111111),不夠的位數會以0補齊。
?? UNSIGNED
???? ? 為“無符號”的意思,?即為非負數。是MYSQL自定義的類型,非標準SQL。unsigned 屬性只針對整型,用途:
??? 1.UNSIGNED 可用來約束數據的范圍,例如有些年齡這種值一般能是負數,那么就可以設置一個 UNSIGNED ,這樣可以不允許負數插入。
??? 2.可以增加數值范圍(相當于把負數那部分加到正數上)。不過少用,不方便移植。
? ? ?整型的每一種都分有無符號(unsigned)和有符號(signed)兩種類型(float和double總是帶符號的),在默認情況下聲明的整型變量都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。無符號版本和有符號版本的區別就是無符號類型能保存2倍于有符號類型的正整數數據,比如16位系統中一個int能存儲的數據的范圍為-32768~32767,而unsigned能存儲的數據范圍則是0~65535。由于在計算機中,整數是以補碼形式存放的。根據最高位的不同,如果是1,有符號數的話就是負數;如果是無符號數,則都解釋為正數。另外,unsigned若省略后一個關鍵字,大多數編譯器都會認為是unsigned int。
?
?
浮點型(float和double)
(M,D) 表示總共M位,D個小數位,D包含于M中。浮點類型不能是unsigned的。?
? 對每種浮點類型,可指定一個最大的顯示尺寸M和小數位數D。M的值應該取1到255。D的值可為0到30,但是不應大于M-2。M和D對float和double都是可選的,但對于decimal是必須的,在選項M和D時,如果省略了它們,則使用缺省值,如果D被省略,它被設置為0。如果M被省掉,它被設置為10。
設一個字段定義為float(5,3),如果插入一個數123.45678,實際數據庫里存的是123.457,但總個數還以實際為準,即6位。浮點型在數據庫中存放的是近似值,而定點類型在數據庫中存放的是精確值。?
decimal(m,d) 參數m<65 是總個數,d<30且 d<m 是小數位。DECIMAL 類型不同于FLOAT和DECIMAL,其中DECIMAL 實際是以串存放的。DECIMAL 可能的最大取值范圍與DOUBLE 一樣,但是其有效的取值范圍由M 和D 的值決定。如果改變M 而固定D,則其取值范圍將隨M 的變大而變大。如果固定M 而改變D,則其取值范圍將隨D 的變大而變小(但精度增加)。
?
?
字符串(char,varchar,_text)
對于可變長的字符類型,其值所占的存儲量是不同的,這取決于實際存放在列中的值的長度,這個長度用L表示。
char和varchar
1.char(n) 若存入字符數小于n,則以空格補于其后,查詢之時再將空格去掉。所以char類型存儲的字符串末尾不能有空格,varchar不限于此。?
2.char(n) 固定長度,char(4)不管是存入幾個字符,都將占用4個字節,varchar是存入的實際字符數+1個字節(n<=255)或2個字節(n>255),所以varchar(4),存入3個字符將占用4個字節。?
3.char類型的字符串檢索速度要比varchar類型的快。
varchar和text
1.varchar可指定n,text不能指定,內部存儲varchar是存入的實際字符數+1個字節(n<=255)或2個字節(n>255),text是實際字符數+2個字節。?
2.text類型不能有默認值。?
3.varchar可直接創建索引,text創建索引要指定前多少個字符。varchar查詢速度快于text,在都創建索引的情況下,text的索引似乎不起作用。
?
?
二進制數據
1._BLOB和_text存儲方式不同,_TEXT以文本方式存儲,英文存儲區分大小寫,而_Blob是以二進制方式存儲,不分大小寫。?
2._BLOB存儲的數據只能整體讀出。?
3._TEXT可以指定字符集,_BLO不用指定字符集。
?
日期時間類型
MySQL 帶有 5 個不同的數據類型可供選擇。它們可以被分成簡單的日期、時間類型,和混合日期、時間類型。根據要求的精度,子類型在每個分類型中都可以使用,并且 MySQL 帶有內置功能可以把多樣化的輸入格式變為一個標準格式。
若定義一個字段為timestamp,這個字段里的時間數據會隨其他字段修改的時候自動刷新,所以這個數據類型的字段可以存放這條記錄最后被修改的時間。
?定義一個字段 為創建時間/更新時間:
?
轉載于:https://www.cnblogs.com/Anec/p/9874918.html
總結
以上是生活随笔為你收集整理的Database学习 - mysql数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fastest way to dupli
- 下一篇: bzoj3143: [Hnoi2013]