Mysql資料庫學習(二):資料型別(數值型別 日期和時間型別 字串型別)
數值型別
日期和時間型別
字串型別
一、數值型別
整數
tinyint[M] [unsigned] [zerofill] // [ ] 表示可選,這裡的M表示顯示寬度,並不是取值範圍,顯示寬度不夠前面以0填充
bool是tinyint(1)的別名
浮點型
IEEE 754浮點數表示
S:符號位
E:指數位
M:尾數位,也叫有效數字位
N =(-1)^S * M * 2^E
單精度float 4個位元組 ,取值範圍-3.402823466E+38~3.402823466E+38, 精度大約7位
雙精度double 8個位元組,取值範圍 -1.7976931348623157E+308~1.7976931348623157E+308, 精度大約15位
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] // M總位數,D是小數點後面的位數,這裡是取值範圍
real是double的別名
定點型
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] //M預設是10,D預設是0
decimal取值範圍與double是一樣的,但是有更高的精度。
decimal儲存方式,參考:http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html
numeric是decimal的別名
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
create table t_number(a tinyint, b tinyint unsigned);
insert into t_number values(100, 200); insert into t_number values(-129, 200); insert into t_number values(128, 200); insert into t_number values(127, 200); insert into t_number values(127, -1); create table t_number2(a int(4) zerofill); insert into t_number2 values(123); insert into t_number2 values(123456); create table t_number3(a bool); create table t_number4(a float, b double); insert into t_number4 values(12345678.12345, 12345678.12345); insert into t_number4 values(12345678.12345, 123456789123456789.12345); /* 12345700 | 1.2345678912345678e17 */ insert into t_number4 values(12345678.12345, 12345678912345.12345); create table t_number5(a double(5,2)); /* -999.99 ~999.99 */ create table t_number6(a decimal(30,6)); insert into t_number6 values(123456789123456789.12345); create table t_number7(a decimal(5,2)); /* -999.99 ~999.99*/ |
二、字串型別
char(M)
varchar(M) //這裡的M表示字元數
CHAR列的長度固定為建立表時宣告的長度。長度可以為從0到255的任何值。當儲存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在儲存或檢索過程中不進行大小寫轉換。
VARCHAR列中的值為可變長字串。長度可以指定為0到65,535之間的值。VARCHAR的最大有效長度由最大行大小和使用的字符集確定。舉例來說,如果字符集為uft8,那麼一個字元需要3個位元組來儲存,則可以儲存的字元數為65535/3=21845,此外還需要一個字元的位置來儲存字元個數,故最大可填寫的字元數為21844。若是latin1,一個字元只需1個位元組儲存,那麼可填寫的字元數為65532。
binary/varbinary
字串儲存需求
VARCHAR、BLOB和TEXT類是變長型別。每個型別的儲存需求取決於列值的實際長度(用前面的表中的L表示),而不是該型別的最大可能的大小。例如,VARCHAR(10)列可以容納最大長度為10的字串。實際儲存需求是字串(L)的長度,加上一個記錄字串長度的位元組。對於字串'abcd',L是4,儲存需要5個位元組。
對於CHAR、VARCHAR和TEXT型別,前面的表中的值L和M應解釋為字元數目,並且列定義中的這些型別的長度表示字元數目。例如,要想儲存一個TINYTEXT值需要L字元+ 1個位元組。
enum/set
1
2 3 4 5 6 7 8 9 10 11 12 13 |
create table t_enum(sex enum('male', 'female')); /* 1 2 */
insert into t_enum values('male'); insert into t_enum values('female'); insert into t_enum values(1); select sex+0 from t_enum; create table t_set(favourite set('dog', 'cat', 'bird')); /* 1 10 100 */ insert into t_set values('dog,cat'); insert into t_set values('dog,bird'); select favourite+0 from t_set; |
列舉/集合看過去像是字串,實際上儲存的是整數。
三、日期和時間
日期和時間看起來像字串,但是以整數來儲存的。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
create table t_datetime(a datetime);
insert into t_datetime values('2014-01-15 10:10:10'); insert into t_datetime values('9999-12-31 23:59:59'); insert into t_datetime values('10000-01-01 00:00:00'); insert into t_datetime values('999-01-01 00:00:00'); insert into t_datetime values('99-01-01 00:00:00'); insert into t_datetime values('69-01-01 00:00:00'); create table t_timestamp(a timestamp); insert into t_timestamp values('2014-01-15 10:10:10'); insert into t_timestamp values('2038-01-19 03:14:07'); insert into t_timestamp values('2038-01-19 03:14:08'); insert into t_timestamp values('2038-01-19 11:14:07'); insert into t_timestamp values('2038-01-19 11:14:08'); create table t_date(a date); insert into t_date values('2012-01-01'); create table t_time(a time); /* 可以表示時間差 */ insert into t_time values('23:12:12'); insert into t_time values('823:12:12'); insert into t_time values('3 23:12:12'); /* 3表示3小時 */ create table t_year(a year); insert into t_year values (2000); insert into t_year values ('2155'); insert into t_year values (2156); |
參考:
《資料庫系統概論》
mysql 5.1 參考手冊
相關文章
- 【MySQL資料型別2之--日期時間型別】MySql資料型別
- 【MySQL資料型別1之--數值型別】MySql資料型別
- 區別值型別資料和引用型別資料型別
- Mysql 資料型別之整數型別MySQL 資料型別
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- 基本資料型別與字串型別資料型別字串
- XSD 日期和時間資料型別資料型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- js資料型別之基本資料型別和引用資料型別JS資料型別
- Mysql 基礎資料型別(無時間相關型別)MySql資料型別
- 強資料型別和弱資料型別資料型別
- 【MySQL資料型別3之--字元型別】MySql資料型別字元
- 資料型別: 資料型別有哪些?資料型別
- 基本資料型別和引用型別的初始值資料型別
- 【Mysql 學習】時間型別MySql型別
- MATLAB(2)資料型別一(數值型和…Matlab資料型別
- MYSQL 資料型別MySQL 資料型別
- [Mysql]資料型別MySql資料型別
- MySQL資料型別MySql資料型別
- 資料型別,型別轉換資料型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- SQL資料型別和C#資料型別間的轉換SQL資料型別C#
- MySQL(二) 資料庫資料型別詳解MySql資料庫資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- Java 資料型別和 MySql 資料型別對應一覽表JavaMySQL 資料型別
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(二)Oracle資料型別
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- 值型別和引用型別型別
- sql學習(mysql)(1)資料型別MySql資料型別
- MySQL學習筆記--資料型別MySql筆記資料型別
- XSD 數值資料型別資料型別
- PLSQL學習——資料型別SQL資料型別
- 0-4 Python 基礎資料型別-數值型別Python資料型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- 二、ClickHouse 資料型別資料型別
- Swift 資料型別(二)Swift資料型別