MySQL基礎01 資料型別

2021-09-12 11:18:38 字數 3892 閱讀 2320

一、整數型別

每個整型型別可以指定乙個最小顯示寬度(注意:這個寬度並不表示儲存的值有多大)

型別儲存空間(n)

取值範圍:-2(n-1)到 2(n-1)-1

tinyint

8-128……127

smallint

16-32768……32767

mediumint

24-8388608……8388607

int32

-2147483648……2147483647

bigint

64(自己算… …)

注:如果有指定unsigned屬性,則訪問範圍可以提公升一倍,

即:-2n到 2n-1

基本格式:

int[(m)] [unsigned] [zerofill]
① m:指定顯示寬度(預設是m=10),以實際的取值範圍為準,值超過顯示寬度,顯示寬度自動增加

② unsigned:無符號的,表示只允許正數,所以取值範圍取絕對值且最大值*2

③ zerofill: 填充0(如果宣告了zerofill,該列會自動設為unsigned)

二、實數型別

1、定點小數:decimal

基本格式:

dec[(m[,d])] [unsigned] [zerofill]
① m:精度,(整數字數+小數字數)不包含小數點的數字總位數(1–30),不指定預設為10

② d:小數字數,如果不指定,預設為0

注: 若位數不夠,小數末尾補零;若位數超預算,則報錯。

2、浮點數:float與double

基本格式:

float[(length) | (,)]

double[(precision) | (,)]

兩者區別在於值所保留的儲存空間數量不同

注:由於對乙個浮點數字來說,可用的儲存空間有限,如果乙個數字非常大或非常小,將儲存這個數字的近似值而不是實際值。

使用方法:

① 使用乙個引數來指定浮點型別

length/precision:在乙個浮點資料型別中可以指定長度,來確定具體的浮點型別。

0~24:單精度float,從第7位有效位,進行四捨五入儲存

25~30:雙精度double,從第16位有效位,進行四捨五入儲存

如:

mysql> create table t3(id float(8));

//m=8,說明是單精度,儲存6位的近似值(第7位四捨五入,後面為0)

mysql> insert into t3 values(123);

mysql> insert into t3 values(1234567);

mysql> insert into t3 values(123456789);

mysql> insert into t3 values(123456789.123456789);

mysql> select * from t3;

+-----------+

| id |

+-----------+

| 123 |

| 1234570 |

| 123457000 |

| 123457000 |

+-----------+

② 使用兩個引數來指定浮點型別

單精度float(m,d):m表示精度(0~24),d表示小數字數

雙精度double(m,d):m表示精度(25~30),d表示小數字數

注意:整數字(m-d)不夠沒關係,超出報錯;小數字(d)不夠補零,超出四捨五入。

三、字串

型別描述

char(n)

固定長度,最多255個字元。char非常適合用於儲存密碼的md5值

varchar(n)

可變長度,最多65535個字元。varchar需要使用1或2個額外位元組記錄字串長度:如果列的最大長度小於或等於255位元組,則使用1個位元組表示,否則使用2個位元組。

text

包括tinytext、smalltext(text)、mediumtext、longtext

blob

包括tinyblob、smallblob(blob)、mediumblob、longblob,二進位制型別。blob 可以儲存。

1、char和varchar

區別:① char(n) 若存入字元數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char型別儲存的字串末尾不能有空格,varchar不限於此。

② char(n) 固定長度,char(4)不管是存入幾個字元,都將占用4個位元組,varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),所以varchar(4),存入3個字元將占用4個位元組。

③ char型別的字串檢索速度要比varchar型別的快。

④ 對於經常更變的資料,char比varchar更好,char不容易產生碎片。

相同:① 如果儲存內容走出指定長度,都會被截斷。

2、varchar和text的區別:

① varchar可指定n,text不能指定,內部儲存varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),text是實際字元數+2個位元組。

② text型別不能有預設值。

③ varchar可直接建立索引,text建立索引要指定前多少個字元。varchar查詢速度快於text,在都建立索引的情況下,text的索引似乎不起作用。

④ char和varchar可以有預設值,text不能指定預設值。

注:盡量避免使用blob/text型別,查詢會使用臨時表,導致嚴重的效能開銷。

四、列舉

列舉可以把一些不重複的字串儲存成乙個預定的集合。mysql在儲存列舉時非常緊湊,會根據列表值的數量壓縮到乙個或者兩個位元組中。mysql在內部會將每個值在列表中的位置儲存為整數,並且在表的*.frm*檔案中儲存「數字 - 字串」對映關係的「查詢表」。

注:盡量避免使用資料作為enum列舉的常量,易混亂。

五、時間和日期

型別描述

datetime

表示時間範圍是2023年到2023年,精度為秒。占用8個位元組。

timestamp

占用4個位元組,表示時間範圍從2023年到2023年。使用該型別時一定要注意時區問題。

六、位位主要是用來存放二進位制數,select查詢預設顯示10進製,可以使用bin()、hex()函式來進行查詢。

bin()—顯示二進位制格式

hex()—顯示十六進製制格式

如:

mysql> create table t(id bit(4));

mysql> insert into t values(2);

mysql> insert into t values(13);

mysql> select bin(id),hex(id) from t;

+---------+---------+

| bin(id) | hex(id) |

+---------+---------+

| 10 | 2 |

| 1101 | d |

+---------+---------+

參考

《高效能mysql》 [美]baron scbwartz, peter zaitsev, vadim tkacbenko 著

Python基礎01 基礎資料型別

注釋的用法 在每一行的開頭,加上 是對該行進行單行注釋 print hello world 行末注釋,在一句程式的末尾,一般用來解釋這句話。注意空格。control 多行同時注釋或取消注釋 mac上是command 嘗試同時取消注釋或注釋下面三行 print hello world print he...

Mysql基礎資料型別

mysql 基礎資料型別筆記 1 設計資料庫之處,選擇的資料型別,應選擇最小資料範圍。2 盡量避免null值 因為查詢語句中,如果包含null列,對mysql來說更難優化,因為null列使得索引 索引統計和值比較都更加複雜。另外,可為null的列會使用更多的儲存空間,在mysql裡也需要特殊處理。當...

C語言基礎 01資料型別

資料型別 一 整形型別 整形資料報括int short long long long等。關於各種型別的範圍 c語言僅規定 short型別不會比int型別長,long型別不會比int短。具體編譯環境可以利用sizeof來測試。例如sizeof int gcc編譯器通常認為 short佔4個位元組,in...