MySQL學習筆記之數據存儲類型

說明:本文是做者對MySQL數據庫數據存儲類型的小小總結。php

Numeric Type (數字類型)

一、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
主要根據存儲字節長度不同劃分:mysql

  • TINYINT:1字節sql

  • SMALLINT:2字節數據庫

  • MEDIUMINT:3字節性能

  • INT:4字節大數據

  • BIGINT:8字節編碼

若是不須要符號數時,建議加上unsigned,會擴充存儲長度一倍,提升存儲性能。如TINYINT UNSIGNED(0~255)/TINYINT(-128~127)。spa

二、DECIMAL/NUMERIC
DECIMAL與NUMERIC同樣,二進制形式存儲數字類型,如DECIMAL(4,2)表示存儲一個小數點後兩位總共4位精度的數字,範圍是-99.99~99.99。總位數最大數字是65。code

三、FLOAT和DOUBLE
FLOAT是4字節存儲,DOUBLE雙精度是8字節存儲。FLOAT(6,4)表示存儲一個小數點後四位總共6位精度的數字,若是小數位有超出則四捨五入。如把99.0000990存進去,則實際上存的是99.0001,這會讓數字失真,因此對於銀行帳號金額要求高精度的,則能夠換成雙精度來存儲,或者對原數字小數點左移存儲。blog

String Type (字符類型)

一、CHAR和VARCHAR
CHAR是固定字符長度,且最大字符長度爲255=2e8-1,處理速度比VARCHAR快,但容易浪費存儲空間。如CHAR(10)表示固定分配10個字符長度存儲空間,當存儲'PHP'時,就浪費了7個字符長度的存儲空間。對於字符後尾的空格,CHAR須要作處理。
VARCHAR是可變長度,根據字符實際長度分配存儲空間,最大字符長度爲65535=2e16-1。VARCHAR(10)表示最大存儲10個字符長度的字符串,存儲'PHP'時只分配3個存儲空間,節約存儲空間。
默認使用InnoDB引擎時,使用VARCHAR比較好。通常用VARCHAR類型比較多。

二、BINARY和VARBINARY
BINARY/VARBINARYCHAR/VARCHAR相似,只不過BINARY/VARBINARY存儲的是二進制字符,長度也表示字節長度而不是字符長度(ASCII編碼一個英文字母1個字節一個漢字2個字節;UTF-8編碼一個英文字母1個字節一個漢字3個字節)。

三、BLOB和TEXT
BLOB存儲大數據量的二進制數據,好比一張圖片。BLOB分爲:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,根據存儲字節最大長度分類。
TEXT存儲大數據量的字符串數據,TEXT分爲:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,根據存儲文本最大長度分類。

四、ENUM
枚舉類型,每個值都有對應的索引index。最大兩個字節存儲,65535個不一樣成員。注意的是:
表中字段:numbers ('0', '1', '2')
insert into test(numbers) values (2),('2'),('3');
select * from test;
會返回:
numbers

  • 1

  • 2

  • 2

這說明,存儲整形2時把2當作索引存的是第二個值'1',存儲字符'2'時就是字符'2',存儲字符'3'時把'3'當作索引3,存的是'2'。

五、SET
集合類型,與ENU相似,最多包含64個成員。

CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); SELECT * FROM myset;

會顧慮掉重複數據:

Date and Time Type (日期和時間類型)

DATE、TIME、DATETIME、TIMESTAMP、YEAR
默認格式爲:

  • DATE: 1000-01-01 ~ 9999-12-31

  • TIME: 00:00:01 ~ 23:59:59

  • DATETIME: 1000-01-01 00:00:00 ~ 9999-12-31 59:59:59

  • TIMESTAMP: 1970-00-01 00:00:00 ~ 2038-01-19 03:14:07

  • YEAR: 0001 ~ 9999

其中,比較方便的一個是timestamp,它能夠根據時區不一樣進行轉換,很好用。

相關文章
相關標籤/搜索