標籤:標識 方式 讀取 返回 定義 超越 rem 當前系統時間 數字
每一個常量、變數和參數都有資料類型、它用來指定一定的儲存格式、約束和有效範圍。MySQL提供了多種資料類型、主要有數值型、字串類型、日期和時間類型。不同的MySQL版本支援的資料類型可能會稍有不同。
數實值型別:
MySQL支援所有標準SQL 中的數實值型別、其中包括了嚴格數實值型別、近似數值資料類型、並在此基礎上做了一些擴充、增加了三種不同長度的整型。
在整數類型中、按照取值範圍和儲存方式不同、分為tinyint、smallint、mediumint、int和bigint這五種類型,如果超出類型範圍的操作,會發生“Out of range” 錯誤提示。為了避免此類問題的發生,在選擇資料類型的時候要根據應用的實際情況確定其取值範圍,最後根據確定的結果去選擇資料類型。
對於整型資料,MySQL還支援在類型名稱後面的小括弧能指定顯示寬度,例如 int(5) 表示當數值寬度小於5位的時候在數字前面填滿寬度,如果不顯示指定寬度則預設為int(11)。一般配合zerofill使用,zerofill就是用“0”填充的意思,也就是在數字位元不夠的空間用字元“0”填滿。
所有的整數類型都有一個可選屬性UNSIGNED(無符號),如果需要在欄位裡面儲存非負數或者需要較大的上限值時,可以用此選項,他的取值範圍時正常值得下限取0,上限取原值的2倍,例如tinyint有符號範圍是-128~+127,而無符號範圍是0~255。如果一個列指定為zreofill,則MySQL自動為該列添加UNSIGNED屬性。
整數類型還有一個屬性,AUTO_INCREMENT。在需要產生唯一識別碼或順序值時,可以使用此屬性,這個屬性只能用於整數。ATUO_INCREMENT值一般從1開始,每行增加1。在插入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)”的用法是非標準用法,如果要用於資料庫的遷移,則最好不要這麼使用。float和double在不指定精度時,預設會按照實際的精度(由實際的硬體和作業系統來決定)來顯示,而decimal在不指定精度時,預設的整數位為10,預設小數位為0。
浮點數如果不寫精度和標度,則會按照實際精度值來顯示,如果有精度和標度,則會自動將四捨五入的結果插入,系統不會報錯;定點數如果不寫精度和標度,則按照預設值decimal(10,0)來進行操作,並且如果資料超越了精度和標度值,系統則會報錯。
BIT(位)類型,用於存放欄位值,BIT(M)可以用來存放多位位元,M範圍從1~64,如果不寫則預設為1位。對於位欄位,直接使用SELECT命令將不會看到結果,可以用bin()
(顯示為二進位格式)或者hex()(顯示為十六進位格式)函數來進行讀取。
日期時間類型:
MySQL中有多種資料類型可以用於日期和時間的表示,不同的版本可能有所差異,這些資料類型主要區別如下:
1.如果用來表示年月日,通常使用DATE來表示。位元組:4,最小值:1000-01-01,最大值:9999-12-31
2.如果用來表示年月日時分秒,通常使用DATETIME來表示。位元組:8,最小值:1000-01-01 00:00:00,最大值:9999-12-31 23:59:59
3.如果用來表示時分秒,通常使用TIME來表示。位元組:4,最小值:-838:59:59,最大值:838:59:59
4.如果需要經常插入或者更新時間為當前系統時間,則通常是用TIMESTAMP來表示。TIMESTAMP值返回後顯示為“YYY-MM-DD HH:MM:SS”格式的字串,顯示寬度固定位19個字元,如果想要獲得數字值,應在TIMESTAMP列添加“+0”。位元組:4,最小值:19700101080001,最大值:2038年的某個時刻
5.如果中表示年份,可以使用YEAR來表示,它比DATE佔用更少的空間,YEAR有2位或4位格式的年,預設為4位格式。在4位格式中,允許的值:1901-2155和0000.在2位中,允許的值:70-69,表示1970-2069年。MySQL以YYYY格式顯示年YEAR值(從5.5.27開始,2位格式的year已不被支援)。位元組:1,最小值:1901,最大值:2155
每個日期時間類型都有一個有效值範圍,如果超出這個範圍,在預設的SQLMode下,系統會進行錯誤提示,並將以零值來進行儲存。
TIMESTAMP還有一個重要特點,就是和時區相關。當插入日期時,會先轉換為本地時區後存放;而從資料庫取出時,也同樣需要將日期轉換為本地時區後顯示。這樣,兩個不同時區的使用者看到的同一個日期可能不一樣。
MySQL的資料類型