1. 程式人生 > >MySQL支持的數據類型

MySQL支持的數據類型

hex 小數點 指定 mysq medium arch 修改 signed 表示

數值類型

整數類型 字節 最小值 最大值
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT、INTEGER 4
BIGINT 5
浮點數類型
FLOAT 4
DOUBLE 8
定點數類型
DEC(M, D) M + 2 最大取值範圍與double相同,給定DECIMAL的有效值範圍由M和D決定
DECIMAL(M, D)
位類型
BIT(M) 1 ~ 8 BIT(1) BIT(64)


P53)對於整型數據,MySQL還支持在類型名稱後面的小括號內指定位寬,例如int(5)表示當數值寬度小於5位的時候在數字前面填滿寬度,如果不顯示指定寬度則默認位int(11)。一般配合zerofill

使用。zerofill就是用“0”填充的意思,也就是在數字位數不夠的空間用字符“0”填滿。

位寬對於插入數字的大小沒有任何影響,不會截斷超出位寬的部分,它依然按照int類型的實際精度進行保存,這時寬度格式已經沒有任何意義,左邊不會再填充任何的“0”字符。

如果一個列指定為zerofill,則MySQL自動為該列添加UNSIGNED屬性。

P54)AUTO_INCREMENT

在插入NULL到一個AUTO_INCREMENT列時,MySQL插入一個比當前最大值大1的值。一個表中最多只能有一個AUTO_INCREMENT列。對於任何想要使用AUTO_INCREMENT的列,應該定義為NOT NULL,並定義為PRIMARY KEY或定義為UNIQUE鍵。


對於小數的表示,MySQL分為兩種方式:浮點數和定點數。浮點數包括float(單精度)和double(雙精度),而定點數則只有decimal一種表示。定點數在MySQL內部以字符串形式存放,比浮點數更精確,適合用來表示貨幣等精度高的數據。

浮點數和定點數都可以用類型名稱後加“(M,D)”的方式進行表示,“(M,D)”表示該值一共顯示M位數字(整數位+小數位),其中D位位於小數點後面,M和D又稱為精度和標度。浮點數後面跟“(M,D)”的用法是非標準用法,如果要用於數據庫的遷移,則最好不要這麽使用。DECIMAL在不指定精度時,默認的整數位為10,默認的小數位為0。

在操作出現出現warning提醒時,可以通過show warnings;

來顯示發生了什麽問題。

技術分享


對於BIT(位)類型,用於存放位字段,BIT(M)可以用來存放多為二進制數,M範圍從1~64,如果不寫則默認為1位。對於位字段,直接使用SELECT命令將不會看到結果,可以用bin(column name)(顯示為二進制格式)或者hex(column name)(顯示為十六進制)函數進行讀取。


日期時間類型

  • 年月日,通常用DATE來表示。
  • 年月日時分秒,通常用DATETIME表示。
  • 時分秒,通常用TIME表示。
日期和時間類型 字節 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年的某個時刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

如果需要經常插入或者更新日期為當前系統時間,則通常使用TIMESTAMP來表示,TIMESTAMP值返回後顯示為“YYYY-MM-DD HH:MM:SS”格式的字符串,顯示寬度固定為19個字符,如果想要獲得數字值,應在TIMESTAMP列添加“+0”。

超出日期值的有效範圍,在默認的SQLMode下系統會提示錯誤,並將以零值來進行存儲。

now()函數返回當前的系統時間。

MySQL只給表中的第一個TIMESTAMP字段設置默認值為系統日期,如果有第二個TIMESTAMP類型,則默認值設置為0值。可以給其他列的TIMESTAMP默認值設為其他常量日期,但不能再修改為current_timestamp,因為MySQL規定TIMESTAMP類型的字段只能有一列的默認值為current_timestamp。

TIMESTAMP還有一個重要特點,就是和時區相關。當插入日期時,會先轉換為本地時區後存放;而從數據庫裏面取出時,也同樣需要將日期轉換為本地時區後顯示。這樣,兩個不同時區的用戶看到的用一個日期可能是不一樣的。

show variables like ‘time_zone‘;   查看當前時區 

set time_zone=‘+9:00‘;    修改時區為東九區

TIMESTAMPDE取值範圍為19700101080001到2038年的某一天,因此它不適合存放比較久遠的日期。


字符串類型

char和varchar的區別在於char列的長度固定為創建表時聲明的長度,長度可以從0~255的任何值,varchar列中的值為可變字符串長度可以指定為0~65535之間的值。在存儲字符串時,char列刪除了尾部的空格,而varchar則保留字符串尾部的空格。

MySQL支持的數據類型