共計 5323 個字符,預(yù)計需要花費 14 分鐘才能閱讀完成。
這篇文章主要介紹了在 mysql 中有幾種數(shù)據(jù)類型,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
1. mysql 的數(shù)據(jù)類型
在 mysql 中有如下幾種數(shù)據(jù)類型:
(1)數(shù)值型 www.2cto.com
數(shù)值是諸如 32 或 153.4 這樣的值。mysql 支持科學(xué)表示法,科學(xué)表示法由整數(shù)或浮點數(shù)后跟“e”或“e”、一個符號(“+”或“-”)和一個整數(shù)指數(shù)來表示。1.24e+12 和 23.47e-1 都是合法的科學(xué)表示法表示的數(shù)。而 1.24e12 不是合法的,因為指數(shù)前的符號未給出。
浮點數(shù)由整數(shù)部分、一個小數(shù)點和小數(shù)部分組成。整數(shù)部分和小數(shù)部分可以分別為空,但不能同時為空。
數(shù)值前可放一個負號“-”以表示負值。
(2)字符(串)型
字符型(也叫字符串型,簡稱串)是諸如“hello, world!”或“一個饅頭引起的血案”這樣的值,或者是電話號碼 87398413 這樣的值。既可用單引號也可用雙引號將串值括起來。初學(xué)者往往分不清數(shù)值 87398143 和字符串 87398143 的區(qū)別。都是數(shù)字啊,怎么一個要用數(shù)值型,一個要用字符型呢?關(guān)鍵就在于:數(shù)值型的 87398143 是要參與計算的,比如它是金融中的一個貨款總額;而字符型的 87398143 是不參與計算的,只是表示電話號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。
(3)日期和時間型
日期和時間是一些諸如“2006-07-12”或“12:30:43”這樣的值。mysql 還支持日期 / 時間的組合,如“2006-07-12 12:30:43”。
(4)null 值
null 表示未知值。比如填寫表格中通訊地址不清楚留空不填寫,這就是 null 值。
我們用 createtable 語句創(chuàng)建一個表(參看前面的章節(jié)),這個表中包含列的定義。例如我們在前面創(chuàng)建了一個 joke 表,這個表中有 content 和 writer 兩個列:
create table (content varchar(20) not null, writer varchar(10) null )
定義一個列的語法如下:
col_name col_typy [col_attributes] [general_attributes]
www.2cto.com
其中列名由 col_name 給出。列名可最多包含 64 個字符,字符包括字母、數(shù)字、下劃線及美元符號。列名可以名字中合法的任何符號(包括數(shù)字)開頭。但列名不能完全由數(shù)字組成,因為那樣可能使其與數(shù)據(jù)分不開。mysql 保留諸如 select、delete 和 create 這樣的詞,這些詞不能用做列名,但是函數(shù)名(如 pos 和 min)是可以使用的。
列類型 col_type 表示列可存儲的特定值。列類型說明符還能表示存放在列中的值的最大長度。對于某些類型,可用一個數(shù)值明確地說明其長度。而另外一些值,其長度由類型名蘊含。例如,char(10) 明確指定了 10 個字符的長度,而 tinyblob 值隱含最大長度為 255 個字符。有的類型說明符允許指定最大的顯示寬度(即顯示值時使用多少個字符)。浮點類型允許指定小數(shù)位數(shù),所以能控制浮點數(shù)的精度值為多少。
可以在列類型之后指定可選的類型說明屬性,以及指定更多的常見屬性。屬性起修飾類型的作用,并更改其處理列值的方式,屬性有以下類型:
(1)專用屬性用于指定列。例如,unsigned 屬性只針對整型,而 binary 屬性只用于 char 和 varchar。
(2)通用屬性除少數(shù)列之外可用于任意列。可以指定 null 或 not null 以表示某個列是否能夠存放 null。還可以用 default,def_value 來表示在創(chuàng)建一個新行但未明確給出該列的值時,該列可賦予值 def_value。def_value 必須為一個常量;它不能是表達式,也不能引用其他列。不能對 blob 或 text 列指定缺省值。
如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列類型之后、通用屬性之前即可。類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列類型和可能給出的列專用屬性之后即可。
2. mysql 的列(字段)類型
中的每個表都是由一個或多個列(字段)構(gòu)成的。在用 create table 語句創(chuàng)建一個表時,要為每列(字段)指定一個類型。列(字段)的類型比數(shù)據(jù)類型更為細化,它精確地描述了給定表列(字段)可能包含的值的種類,如是否帶小數(shù)、是否文字很多。
2.1 數(shù)值列類型 有整數(shù)和浮點數(shù)值的列類型,如表 1 所示。整數(shù)列類型可以有符號也可無符號。有一種特殊的屬性允許整數(shù)列值自動生成,這對需要唯一序列或標識號的應(yīng)用系統(tǒng)來說是非常有用的。 www.2cto.com
類型
說明
tinyint 非常小的整數(shù)
smallint 較小整數(shù)
mediumint 中等大小整數(shù)
int 標準整數(shù)
bigint 較大整數(shù)
float 單精度浮點數(shù)
double 雙精度浮點數(shù)
decimal 一個串的浮點數(shù)
表 1:數(shù)值列類型
每種數(shù)值類型的名稱和取值范圍如表 2 所示。
類型說明
取值范圍
tinyint[(m)] 有符號值:-128 到 127(- 27 到 27 – 1)無符號值:0 到 255(0 到 28 – 1)
smallint[(m)] 有符號值:-32768 到 32767(- 215 到 215 – 1)無符號值:0 到 65535(0 到 21 6 – 1) www.2cto.com
mediumint[(m)] 有符號值:-8388608 到 8388607(- 22 3 到 22 3 – 1)無符號值:0 到 16777215(0 到 22 4 – 1)
int[(m)] 有符號值:-2147683648 到 2147683647(- 231 到 231- 1)無符號值:0 到 4294967295(0 到 232 – 1)
bigint[(m)] 有符號值:-9223372036854775808 到 9223373036854775807(- 263 到 263-1)
無符號值:0 到 18446744073709551615(0 到 264 ndash; 1)
float[(m, d)] 最小非零值:plusmn;1.175494351e – 38
double[(m,d)] 最小非零值:plusmn;2.2250738585072014e – 308
decimal (m, d) 可變;其值的范圍依賴于 m 和 d
表 2:數(shù)值列類型的取值范圍
各種類型值所需的存儲量如表 3 所示。
類型說明
存儲需求
tinyint[(m)] 1 字節(jié)
smallint[(m)] 2 字節(jié)
mediumint[(m)] 3 字節(jié)
int[(m)] 4 字節(jié)
bigint[(m)] 8 字節(jié)
float[(m, d)] 4 字節(jié)
double[(m, d)] 8 字節(jié)
decimal (m, d) m 字節(jié)(mysql 3.23),m+ 2 字節(jié)(mysql 3.23)
表 3:數(shù)值列類型的存儲需求 www.2cto.com
mysql 提供了五種整型:tinyint、smallint、mediumint、int 和 bigint。int 為 integer 的縮寫。這些類型在可表示的取值范圍上是不同的。整數(shù)列可定義為 unsigned 從而禁用負值;這使列的取值范圍為 0 以上。各種類型的存儲量需求也是不同的。取值范圍較大的類型所需的存儲量較大。
mysql 提供三種浮點類型:float、double 和 decimal。與整型不同,浮點類型不能是 unsigned 的,其取值范圍也與整型不同,這種不同不僅在于這些類型有最大值,而且還有最小非零值。最小值提供了相應(yīng)類型精度的一種度量,這對于記錄科學(xué)數(shù)據(jù)來說是非常重要的(當然,也有負的最大和最小值)。
在選擇了某種數(shù)值類型時,應(yīng)該考慮所要表示的值的范圍,只需選擇能覆蓋要取值的范圍的最小類型即可。選擇較大類型會對空間造成浪費,使表不必要地增大,處理起來沒有選擇較小類型那樣有效。對于整型值,如果數(shù)據(jù)取值范圍較小,如人員年齡或兄弟姐妹數(shù),則 tinyint 最合適。mediumint 能夠表示數(shù)百萬的值并且可用于更多類型的值,但存儲代價較大。bigint 在全部整型中取值范圍最大,而且需要的存儲空間是表示范圍次大的整型 int 類型的兩倍,因此只在確實需要時才用。對于浮點值,double 占用 float 的兩倍空間。除非特別需要高精度或范圍極大的值,一般應(yīng)使用只用一半存儲代價的 float 型來表示數(shù)據(jù)。
在定義整型列時,可以指定可選的顯示尺寸 m。如果這樣,m 應(yīng)該是一個 1 到 255 的整數(shù)。它表示用來顯示列中值的字符數(shù)。例如,mediumint(4)指定了一個具有 4 個字符顯示寬度的 mediumint 列。如果定義了一個沒有明確寬度的整數(shù)列,將會自動分配給它一個缺省的寬度。缺省值為每種類型的“最長”值的長度。如果某個特定值的可打印表示需要不止 m 個字符,則顯示完全的值;不會將值截斷以適合 m 個字符。 www.2cto.com
對每種浮點類型,可指定一個最大的顯示尺寸 m 和小數(shù)位數(shù) d。m 的值應(yīng)該取 1 到 255。d 的值可為 0 到 3 0,但是不應(yīng)大于 m – 2(如果熟悉 odbc 術(shù)語,就會知道 m 和 d 對應(yīng)于 odbc 概念的“精度”和“小數(shù)點位數(shù)”)。m 和 d 對 float 和 double 都是可選的,但對于 decimal 是必須的。在選項 m 和 d 時,如果省略了它們,則使用缺省值。
2.2 字符串列類型
mysql 提供了幾種存放字符數(shù)據(jù)的串類型,其類型如下:
類型名
說明
char 定長字符串
varchar 可變長字符串
tinyblob 非常小的 blob(二進制大對象)
blob 小 blob
mediumblob 中等的 blob
longblob 大 blob
tinytext 非常小的文本串
text 小文本串
mediumtext 中等文本串
longtext 大文本串
enum 枚舉;列可賦予某個枚舉成員
set 集合;列可賦予多個集合成員
表 4:字符串列類型
下表給出了 mysql 定義串值列的類型,以及每種類型的最大尺寸和存儲需求。對于可變長的列類型,各行的值所占的存儲量是不同的,這取決于實際存放在列中的值的長度。這個長度在表中用 l 表示。 www.2cto.com
類型說明
最大尺寸
存儲需求
char(m) m 字節(jié) m 字節(jié)
varchar(m) m 字節(jié) l + 1 字節(jié)
tinyblob, tinytext 28- 1 字節(jié) l + 1 字節(jié)
blob, text 216 – 1 字節(jié) l + 2 字節(jié)
mediumblob, mediumtext 224- 1 字節(jié) l + 3 字節(jié)
longblob, longtext 232- 1 字節(jié) l + 4 字節(jié)
enum(“value1”,“value2”, …) 65535 個成員 1 或 2 字節(jié)
set (“value1”,“value2”, …) 64 個成員 1、2、3、4 或 8 字節(jié)
表 5:串列類型最大尺寸及存儲需求
l 以外所需的額外字節(jié)為存放該值的長度所需的字節(jié)數(shù)。mysql 通過存儲值的內(nèi)容及其長度來處理可變長度的值。這些額外的字節(jié)是無符號整數(shù)。請注意,可變長類型的最大長度、此類型所需的額外字節(jié)數(shù)以及占用相同字節(jié)數(shù)的無符號整數(shù)之間的對應(yīng)關(guān)系。例如,mediumblob 值可能最多 224 – 1 字節(jié)長并需要 3 個字節(jié)記錄其結(jié)果。3 個字節(jié)的整數(shù)類型 mediumint 的最大無符號值為 224 – 1。這并非偶然。 www.2cto.com
2.3 日期時間列類型
mysql 提供了幾種時間值的列類型,它們分別是:date、datetime、time、timestamp 和 year。下表給出了 mysql 為定義存儲日期和時間值所提供的這些類型,并給出了每種類型的合法取值范圍。
類型名
說明
date“yyyy-mm-dd”格式表示的日期值
time“hh:mm:ss”格式表示的時間值
datetime“yyyy-mm-dd hh:mm:ss”格式
timestamp“yyyymmddhhmmss”格式表示的時間戳值
year“yyyy”格式的年份值
表 6:日期時間列類型
類型名
取值范圍
存儲需求
date“1000-01-01”到“9999-12-31”3 字節(jié)
time“-838:59:59”到“838:59:59”3 字節(jié)
datetime“1000-01-01 00:00:00”到“9999-12-31 23:59:59”8 字節(jié)
timestamp 19700101000000 到 2037 年的某個時刻 4 字節(jié)
year 1901 到 2155 1 字節(jié) www.2cto.com
表 7:日前時間列類型的取值范圍和存儲需求
下面舉個例子:
create table student (name varchar(20) not null,chinese tinyint(3),maths tinyint(3),english tinyint(3),birthday date )
這個例子創(chuàng)建一個 student 表,這個表中有 name 字段,字符類型列,不允許 null(空值)。有 chinese、maths 和 english 三個整數(shù)類型列。還有個 birthday 日期類型列。
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“在 mysql 中有幾種數(shù)據(jù)類型”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!