mysql資料型別及列型別(2)

2021-04-28 15:34:40 字數 4454 閱讀 6398

2. mysql的列(字段)型別

資料庫中的每個表都是由乙個或多個列(字段)構成的。在用create table語句建立乙個表時,要為每列(字段)指定乙個型別。列(字段)的型別比資料型別更為細化,它精確地描述了給定表列(字段)可能包含的值的種類,如是否帶小數、是否文字很多。

2.1數值列型別

mysql有整數和浮點數值的列型別,如表1所示。整數列型別可以有符號也可無符號。有一種特殊的屬性允許整數列值自動生成,這對需要唯一序列或標識號的應用系統來說是非常有用的。

型別說明

tinyint 非常小的整數

smallint 較小整數

mediumint 中等大小整數

int 標準整數

bigint 較大整數

float 單精度浮點數

double 雙精度浮點數

decimal 乙個串的浮點數

表1:數值列型別

每種數值型別的名稱和取值範圍如表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)

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 – 1)

float[(m, d)] 最小非零值:±1.175494351e - 38

double[(m,d)] 最小非零值:±2.2250738585072014e - 308

decimal (m, d) 可變;其值的範圍依賴於m 和d

表2:數值列型別的取值範圍

各種型別值所需的儲存量如表3所示。

型別說明

儲存需求

tinyint[(m)] 1位元組

smallint[(m)] 2位元組

mediumint[(m)] 3位元組

int[(m)] 4位元組

bigint[(m)] 8位元組

float[(m, d)] 4位元組

double[(m, d)] 8位元組

decimal (m, d) m位元組(mysql < 3.23),m+2位元組(mysql > 3.23 )

表3:數值列型別的儲存需求

mysql提供了五種整型: tinyint、smallint、mediumint、int和bigint。int為integer的縮寫。這些型別在可表示的取值範圍上是不同的。 整數列可定義為unsigned從而禁用負值;這使列的取值範圍為0以上。各種型別的儲存量需求也是不同的。取值範圍較大的型別所需的儲存量較大。

mysql 提供三種浮點型別: float、double和decimal。與整型不同,浮點型別不能是unsigned的,其取值範圍也與整型不同,這種不同不僅在於這些型別有最大 值,而且還有最小非零值。最小值提供了相應型別精度的一種度量,這對於記錄科學資料來說是非常重要的(當然,也有負的最大和最小值)。

在選擇了某種數值型別時,應該考慮所要表示的值的範圍,只需選擇能覆蓋要取值的範圍的最小型別即可。選擇較大型別會對空間造成浪費,使表不必要地增大,處 理起來沒有選擇較小型別那樣有效。對於整型值,如果資料取值範圍較小,如人員年齡或兄弟姐妹數,則tinyint最合適。mediumint能夠表示數百 萬的值並且可用於更多型別的值,但儲存代價較大。bigint在全部整型中取值範圍最大,而且需要的儲存空間是表示範圍次大的整型int型別的兩倍,因此 只在確實需要時才用。對於浮點值,double占用float的兩倍空間。除非特別需要高精度或範圍極大的值,一般應使用只用一半儲存代價的float型 來表示資料。

在定義整型列時,可以指定可選的顯示尺寸m。如果這樣,m應該是乙個1 到255的整數。它表示用來顯示列中值的字元數。例如,mediumint(4)指定了乙個具有4個字元顯示寬度的mediumint列。如果定義了乙個 沒有明確寬度的整數列,將會自動分配給它乙個預設的寬度。預設值為每種型別的「最長」值的長度。如果某個特定值的可列印表示需要不止m個字元,則顯示完全 的值;不會將值截斷以適合m個字元。

對每種浮點型別,可指定乙個最大的顯示尺寸m 和小數字數d。m 的值應該取1 到255。d的值可為0 到3 0,但是不應大於m - 2(如果熟悉odbc 術語,就會知道m 和d 對應於odbc 概念的「精度」和「小數點位數」)。m和d對float和double 都是可選的,但對於decimal是必須的。在選項m 和d時,如果省略了它們,則使用預設值。

2.2字串列型別

mysql提供了幾種存放字元資料的串型別,其型別如下:

型別名說明

char 定長字串

varchar 可變長字串

tinyblob 非常小的blob(二進位製大物件)

blob 小blob

mediumblob 中等的blob

longblob 大blob

tinytext 非常小的文字串

text 小文字串

mediumtext 中等文字串

longtext 大文字串

enum 列舉;列可賦予某個列舉成員

set 集合;列可賦予多個集合成員

表4:字串列型別

下表給出了mysql 定義串值列的型別,以及每種型別的最大尺寸和儲存需求。對於可變長的列型別,各行的值所佔的儲存量是不同的,這取決於實際存放在列中的值的長度。這個長度在表中用l 表示。

型別說明

最大尺寸

儲存需求

char( m) m 位元組 m 位元組

varchar(m) m 位元組 l + 1位元組

tinyblob, tinytext 28- 1位元組 l + 1位元組

blob, text 216 - 1 位元組 l + 2位元組

mediumblob, mediumtext 224- 1位元組 l + 3位元組

longblob, longtext 232- 1位元組 l + 4位元組

enum(「value1」, 「value2」, …) 65535 個成員 1 或2位元組

set (「value1」, 「value2」, …) 64個成員 1、2、3、4 或8位元組

表5:串列型別最大尺寸及儲存需求

l 以外所需的額外位元組為存放該值的長度所需的位元組數。mysql 通過儲存值的內容及其長度來處理可變長度的值。這些額外的位元組是無符號整數。請注意,可變長型別的最大長度、此型別所需的額外位元組數以及占用相同位元組數的 無符號整數之間的對應關係。例如,mediumblob 值可能最多224 - 1位元組長並需要3 個位元組記錄其結果。3 個位元組的整數型別mediumint 的最大無符號值為224 - 1。這並非偶然。

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位元組

time 「-838:59:59」到「838:59:59」 3位元組

datetime 「1000-01-01 00:00:00」 到「9999-12-31 23:59:59」 8位元組

timestamp 19700101000000 到2037 年的某個時刻 4位元組

year 1901 到2155 1位元組

表7: 日前時間列型別的取值範圍和儲存需求

下面舉個例子:

create table student

(name varchar(20) not null,

chinese tinyint(3),

maths tinyint(3),

english tinyint(3),

birthday date

) 這個例子建立乙個student表,這個表中有name欄位,字元型別列,不允許null(空值)。有chinese、maths和english三個整數型別列。還有個birthday日期型別列。

mysql資料型別及列型別(1)

我們要把現實世界中的各種資訊轉換成計算機能理解的東西,這些轉換後的資訊就形成了資料。例 如,某人的出生日期是 1987年5月23日 他的身高是170厘公尺,等等。資料不僅包括數字 字母 文字和其他特殊字元組成的文字形式的資料,而且還 包括圖形 影象 動畫 影像 聲音等多 資料。但使用最多 最基本的仍...

MySQL資料型別及列型別 一

我們要把現實世界中的各種資訊轉換成計算機能理解的東西,這些轉換後的資訊就形成了資料。例如,某人的出生日期是 1987年5月23日 他的身高是170厘公尺,等等。資料不僅包括數字 字母 文字和其他特殊字元組成的文字形式的資料,而且還包括圖形 影象 動畫 影像 聲音等多 資料。但使用最多 最基本的仍然是...

MySQL資料型別及列型別 二

下表給出了mysql 定義串值列的型別,以及每種型別的最大尺寸和儲存需求。對於可變長的列型別,各行的值所佔的儲存量是不同的,這撒於實際存放在列中的值的長度。這個長度在表中用l 表示。型別說明 最大尺寸 儲存需求 char m m 位元組 m 位元組 varchar m m 位元組 l 1位元組 ti...