MySQL資料型別及列型別 一

2021-09-30 03:44:51 字數 4858 閱讀 6964

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

1. mysql的資料型別

在mysql中有如下幾種資料型別:

(1)數值型

數值是諸如32 或153.4 這樣的值。mysql 支援科學表示法,科學表示法由整數或浮點數後跟「e」或「e」、乙個符號(「+」或「-」)和乙個整數指數來表示。1.24e+12 和23.47e-1 都是合法的科學表示法表示的數。而1.24e12 不是合法的,因為指數前的符號未給出。

浮點數由整數部分、乙個小數點和小數部分組成。整數部分和小數部分可以分別為空,但不能同時為空。

數值前可放乙個負號「-」以表示負值。

(2)字元(串)型

字元型(也叫字串型,簡稱串)是諸如「hello, world!」或「乙個饅頭引起的血案」這樣的值,或者是**號碼87398413這樣的值。既可用單引號也可用雙引號將串值括起來。

初學者往往分不清數值87398143和字串87398143的區別。都是數字啊,怎麼乙個要用數值型,乙個要用字元型呢?關鍵就在於:數值型的87398143是要參與計算的,比如它是金融中的乙個貨款總額;而字元型的87398143是不參與計算的,只是表示**號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。

(3)日期和時間型

日期和時間是一些諸如「2006-07-12」或「12:30:43」這樣的值。mysql還支援日期/時間的組合,如「2006-07-12 12:30:43」。

(4)null值

null表示未知值。比如填寫**中通訊位址不清楚留空不填寫,這就是null值。

我們用create table語句建立乙個表(參看前面的章節),這個表中包含列的定義。例如我們在前面建立了乙個joke表,這個表中有content和writer兩個列:

定義乙個列的語法如下:

其中列名由col_name 給出。列名可最多包含64個字元,字元包括字母、數字、下劃線及美元符號。列名可以名字中合法的任何符號(包括數字)開頭。但列名不能完全由數字組成,因為那樣可能使其與資料分不開。mysql保留諸如select、delete和create這樣的詞,這些詞不能用做列名,但是函式名(如pos 和min)是可以使用的。

列型別col_type表示列可儲存的特定值。列型別說明符還能表示存放在列中的值的最大長度。對於某些型別,可用乙個數值明確地說明其長度。而另外一些值,其長度由型別名蘊含。例如,char(10) 明確指定了10個字元的長度,而tinyblob值隱含最大長度為255個字元。有的型別說明符允許指定最大的顯示寬度(即顯示值時使用多少個字元)。浮點型別允許指定小數字數,所以能控制浮點數的精度值為多少。

(1)專用屬性用於指定列。例如,unsigned 屬性只針對整型,而binary屬性只用於char 和varchar。

(2)通用屬性除少數列之外可用於任意列。可以指定null 或not null 以表示某個列是否能夠存放null。還可以用default,def_value 來表示在建立乙個新行但未明確給出該列的值時,該列可賦予值def_value。def_value 必須為乙個常量;它不能是表示式,也不能引用其他列。不能對blob 或text 列指定預設值。

如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列型別之後、通用屬性之前即可。類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列型別和可能給出的列專用屬性之後即可。

2. mysql的列(字段)型別

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

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:數值列型別的取值範圍

型別說明

儲存需求

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資料型別及列型別(1)

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

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

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

MySQL資料型別及列型別 二

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