MYSQL資料庫表字段型別(二)

2021-10-09 04:39:27 字數 3603 閱讀 9150

文字字串型別

鏈結

整數型別,浮點數型別和定點型別

二進位制字串型別

字串型別用來儲存字串資料,除了可以在儲存字串資料之外,還可以儲存其他資料,比如和聲音的二進位制資料。(mysql還支援兩類字元型資料:文字字串型別。文字字串二進位制字串)

表一型別名稱

說明儲存需求

char(m)

固定長度非二進位制字串

m位元組,1<=m<=255

varchar(m)

變長非二進位制字串

l+1位元組,在此l<=m和1<=m<=255

tinytext

非常小的非進製字串

l+1位元組,在此l<28

text

小的非二進位制字串

l+2位元組,在此l<216

mediumtext

中等大小的非二進位制字串

l+3位元組,在此l<232

enum

列舉型別,只能乙個列舉字串值

1或2位元組,取值於列舉值的數目(最大值為65535)

set乙個設定,字串物件可以有零個或多個set成員

1,2,3,4或8位元組,取值於集合成員的數量(最多為64個成員)

上面的l是實際長度

varchar和text型別都是邊長型別,其儲存需求取決於列值的實際長度(前面的**中用l表示),而不是取決於型別的最大可能尺寸。例如,乙個varchar(10)列能儲存最大長度為10個字元的字串,實際的儲存需要是字串的長度l加上1位元組(記錄字串的長度)。對於字元"abcd",l是4而儲存要求是5位元組。

char和varchar型別

char(m)為固定長度字串,在定義時指定字串列長。當儲存時在右側填充空格,以達到指定的長度。m表示列長度,m的範圍時0~255個字元。例如

,char(4)定義了乙個固定長度的字串列,其包含的字元個數最大為4。當檢索到char值時,尾部的空格將被刪除。

varchar(m)是長度可變的字串,m表示最大列長度。m的範圍是0-65535。varchar的最大實際長度由最長的行的大小和使用的字符集確定,而實際占用的空間為字串的實際長度加1。例如,varchar(m)是長度可變的字串,m表示最大列長度。m的範圍是0-65535。varchar的最大實際長度由最長的行的大小和使用的字符集確定,而實際占用的空間為字串的實際長度加1。例如,varchar(50)定義了乙個最大長度為50的字串,如果插入的字串只有10個字元,則實際儲存的字串為10個字元和乙個字串結束字元。varchar在值儲存和檢索時尾部的空格仍保留。

下面用不同字串儲存到char(4)與varchar(4)儲存區別

表二插入值

char(4)

儲存需求

varchar(4)

儲存需要

『』『\s\s\s\s』

4位元組『』

1位元組『ab』

『ab\s\s』

4位元組『ab』

3位元組『abc』

『abc\s』

4位元組『abc』

4位元組『abcd』

『abcd』

4位元組『abcd』

4位元組『abcdf』

『abcd』

4位元組abcd

4位元組從上表可以看出,不管插入的長度為多少,占用的空間均為4個位元組;varchar定義的列所佔位元組數均為實際長度+1。

char和varchar取出時的區別

表二中最後一行的值只有在使用"不嚴格"模式時,字串才會被截斷插入;如果mysql執行在』嚴格』,超過列長度的值不會被儲存,並且會出現錯誤資訊 「error 1406(22001)」:data too long for column",

設定嚴格模式 set session 只在當前操作介面有效 set global 全域性有效,全域性設定。 ​set session sql_mode =『strict_trans_tables』 修改完之後退出當前客戶端重新登陸即可。

text型別enum型別enum是乙個字串物件,其值為表建立時在列規定中列舉的一列值。語法格式如下:

欄位名 enum

('值1','值2',.

....

.'值n'

)

先建立一張測試表

再插入資料

然後取出資料

定義改enum型別的列(『zhangsan』,『lisi』,『wangwu』),改列可以取的值和每個值的索引如表三所示表三值

索引null

null『』0

zhangsan

1lisi

2wangwu

3enum值依照索引順序排列,並且空字串排在非空字串前,null值排在其他所有的列舉值前。

enum型別的字段在取值時,只能在指定的列舉列表中取,而且一次只能取乙個。建立的成員中有空格時,其尾部的空格將自動被刪除。enum值在內部用整數表示,並且每個列舉值均有乙個索引值:列表值所允許的成員值從1開始編號,mysql儲存的就是這個索引編號。列舉最多可以有65535個元素。

enum列總有乙個預設值:如果將enum列宣告為null,null值則為該列的乙個有效值,並且預設為null;如果enum列被宣告為notnull,其預設值為允許的值列表的第乙個元素。

setset是乙個字串物件,可以有零或多個值。set列最多可以有64個成員,其值為表建立時規定的一列值。指定包括多個set成員的set列值時,各成員之間用逗號(,)間隔開。語法格式如下:

set

('值1','值2'..

....

'值n'

)

與enum型別相同,set值在內部用整數表示,列表中每乙個值都有乙個索引編號。當建立表時,set成員值的尾部空格將自動被刪除。與enum型別不同的是,enum型別的字段只能從定義的列值中選擇乙個值插入,而set型別的列可從定義的列值中選擇多個字元的聯合。

如果插入set欄位列值有重複,則mysql自動刪除重複的值;插入set欄位的值的順序不重要,mysql會存入資料庫時按照定義的順序顯示;如果插入了不正確的值,預設情況下,mysql將忽視這些值,並給出警告。

MYSQL資料庫表字段型別(一)

整數型別 浮點數型別和定點數型別 日期與時間型別 鏈結 字串型別 二進位制字串型別 數值型別主要用來儲存數字,mysql提供了多種數值資料型別,不同的資料型別提供了不同的取值範圍,可以儲存的值範圍越大,其所需要的儲存空間也會越大。型別名稱 說明儲存需求 tinyint 很小的整數 1位元組small...

MYSQL資料庫表字段型別(三)

二進位制字串型別 鏈結整數型別,浮點數型別和定點型別 文字字串型別 mysql的二進位制資料型別有bit,binary,mediumblob和longblob。本節將講解各類二進位制字串型別的特點和使用方法。表一列出了mysql中的二進位制資料型別。表一型別名稱 說明儲存需求 bit m 位欄位型別...

修改Oracle資料庫表字段型別

修改user表的name欄位型別從varchar2改為clob 1.新增乙個備份字段 alert table user add name back clob 2.複製name的值到備份欄位name back update user set name back name 3.刪除原來的字段user a...