我們要把現實世界中的各種資訊轉換成計算機能理解的東西,這些轉換後的資訊就形成了資料。例如,某人的出生日期是「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
非常小的整數
**allint
較小整數
mediumint
中等大小整數
int標準整數
bigint
較大整數
float
單精度浮點數
double
雙精度浮點數
decimal
乙個串的浮點數
表1:數值列型別
每種數值型別的名稱和取值範圍如表2所示。
型別說明
取值範圍
tinyint[(m)]
有符號值:-128 到127(- 27 到27 - 1)
無符號值:0到255(0 到28 - 1)
**allint[(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位元組**allint[(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、**allint、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集合;列可賦予多個集合成員
基礎知識 MySQL資料型別及列型別 2
下表給出了mysql 定義串值列的型別,以及每種型別的最大尺寸和儲存 需求。對於可變長的列型別,各行的值所佔的儲存 量是不同的,這撒於實際存放在列中的值的長度。這個長度在表中用l 表示。型別說明 最大尺寸 儲存 需求 char m m 位元組 m 位元組 varchar m m 位元組 l 1位元組...
基礎知識 MySQL資料型別及列型別 1
我們要把現實世界中的各種資訊轉換成計算機能理解的東西,這些轉換後的資訊就形成了資料。例如,某人的出生日期是 1987年5月23日 他的身高是170厘公尺,等等。資料不僅包括數字 字母 文字和其他特殊字元組成的文字形式的資料,而且還包括圖形 影象 動畫 影像 聲音等多 資料。但使用最多 最基本的仍然是...
MySql基礎知識 資料型別
整數型別 位元組最小值 最大值tinyint 1有符號 128,無符號 0 有符號127,無符號255 smallint 2有符號 32768,無符號 0 有符號 32767,無符號 65535 mediumint 3有符號 8388608,無符號 0 有符號 8388607,無符號 1677215...