MySQL數據類型介紹
MySQL支持多種數據類型,主要有數值類型、日期類型、字符串類型
MySQL主要提供的整數類型有:TINYINT/SMALLINT/MEDIUMINT/INT(INTEGER)/BIGINT
整數類型的屬性字段可以添加AUTO_INCREMENT自增約束條件。
整數類型的取值范圍
MySQL中使用浮點數和定點數表示小數。浮點數類型有兩種,單精度浮點數(FLOAT)和雙精度浮點數(DOUBLE)。定點類型只有DECIMAL。浮點類型和定點類型都可以用(M,N)來表示,其中M成為精度,表示總共的位數;N成為標度,表示小數的位數。
不論是定點還是浮點數,如果用戶指定的精度超出精度范圍,則會四捨五入進行處理
范例:
創建表test1,其中字段x,y,z數據類型依次為FLOAT(5,1)/DOUBLE(5,1)/DECIMAL(5,1)向表中插入數據5.51,5.12,5.123
create table test1 ( x FLOAT(5,1), y DOUBLE(5,1), z DECIMAL(5,1) );
插入數據:
insert into test1 values (5.51,5.12,5.123);
查看數據:
select * from test1;
MySQL中有多種表示日期的數據類型,主要有:DATETIME,DATE,TIMESTAMP,TIME,YEAR。
YEAR類型是一個單字節類型用於表示年,在存儲是只要一個字節。可以使用各種格式指定YEAR的值
(1)以4位字符串或者4位數字格式表示的YEAR,范圍是1901-2155.輸入格式為:‘YYYY’或者YYYY。例如輸入‘2010’或2010
(2)以2位字符串格式表示的YEAR,范圍是‘00’——‘99’。‘00’——‘69’范圍的值分別被轉換為2000—2069和1970—1999范圍的YEAR值。插入超過取值范圍的值將被轉換為2000
(3)以2位數字表示的YEAR,范圍1~99.1~69和70~99范圍的值分別被轉換為2001~2069和1970~1999范圍的YEAR值。0將被轉換為0000而不是2000
范例:
創建數據表test2,定義數據類型為YEAR的字段y,插入2014,‘2014’,‘2166’
Insert into test2 values(2014),(‘2014’),(‘2166’);
TIME類型用在只需要時間信息的值,在存儲時需要3個字節。格式為‘HH:MM:SS’。HH表示小時;MM表示分鐘;SS表示秒。使用各種格式指定TI ME值。
(1)采用‘D HH:MM:SS’格式的字符串。
也可以使用下面任何一種非嚴格的語法:‘HH:MM:SS’/‘HH:MM’/‘D HH:MM’/‘D HH’/‘SS’。這裡D表示是日,可以去0-34之間的值。插入數據庫時,D被轉換為小時保存,格式為“D*24+HH”
(2)采用‘HHMMSS’格式的,沒有間隔符的字符串或者HHMMSS格式的數值。
范例:
創建test3表,定義數據類型為TIME的字段t,向其中插入‘11:05:05’,‘23:23’,‘2 10:10’,‘3 02’,‘10’。
insert into test3 values ('11:05:05'),('23:23'),('2 10:10');
DATE類型用在僅僅需要日期的時候,沒有時間部分,在存儲時需要3個字節。日期格式為‘YYYY-MM-DD’
(1)以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示日期。
(2)以‘YY-MM-DD’或者‘YYMMDD’字符串表示日期,在這裡YY表示兩位的年。‘00~69’范圍轉換為‘2000~2069’;‘70~99’范圍轉換為‘1970~1999’。
(3)以YY-MM-DD或者YYMMDD格式表示日期。與前面類似,00-69表示2000-2069;70-99轉換為1970-1999
(4)使用CURRENT_DATE或者NOW()插入當前系統日期。
范例:
創建數據表test4,定義數據類型DATE的字段為d,插入‘YYYY-MM-DD’和‘YYYYMMDD’字符串格式的日期
insert into test4 values ('2014-12-11'),(20141211);
插入當前系統時間:
insert into test4 values (current_date),(now());
DATETIME類型用在需要同時包含日期和時間的值。在存儲時需要8字節。日期格式為‘YYYY-MM-DD HH:MM:SS’,在給DATETIME類型的字段賦值時,可以使用字符串類型或數字類型的數據插入。
(1)以‘YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式的值,其取值范圍‘1001-01-01 00:00:00’~‘9999-12-3 23:59:59’
(2)以‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示日期。
(3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS的數字格式表示日期和時間
范例:
insert into test5 values ('2014-12-11 15:27:12'),('20141211152712'),(20141211152712);
TIMESTAMP顯示格式與DATETIME相同,顯示寬度固定在19個字符,日期格式為YYYY-MM-DD HH:MM:SS,存儲時需要4字節。但是TIMESTAMP列的取值范圍小於DATETIME的取值范圍,為‘1970-01-01 00:00:01’UTC ~‘2038-01-19 03:14:07’UTC。UTC為世界標准時間。
范例:
創建test7,定義數據類型為TIMESTAMP的字段ts,向表中插入值‘19950101010101’,‘950505050505’,now().
insert into test6 values ('19950101010101'),(950505050505),(now());
MySQL中字符串類型指的:CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET
CHAR(M)為固定長度字符串,在定義時指定字符串列長。保存時在右側填充空格以達到指定的長度。M表示列長,范圍0~255個字符。例如:CH AR(4)定義了一個固定長度的字符串列,其包含的字符個數最大為4.當檢索到CHAR值時,尾部的空空格將被刪除。
VARCHAR(M)是長度可變的字符串,M表示列最大長度,M的范圍0~65535。VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,而其實際占用的空間為字符串的實際長度+1。例如VARCHAR(50)定義了一個最大長度為50的字符串。如果插入的字符串只有10個字符,則實際存儲的字符串為10個字符串+一個結束字符串。VARCHAR在值保存和檢索時,尾部的空格仍保留。
TEXT列保存非二進制字符串,如文章,評論等。當保存或查詢TEXT列的值時,不刪除尾部空格。TEXT類型分為4中:TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT。不同的TEXT類型的存儲空間和數據長度不同。
(1)TINYTEXT最大長度為255字符的TEXT列
(2)TEXT最大長度為65535字符的TEXT列
(3)MEDIUMTEXT最大長度為16777215字符的TEXT列
(4)LONGTEXT最大長度為4294967295(4GB)字符的列
ENUM是一個字符串對象,其值為表創建時在列規定中枚舉的一列值。語法格式如下:
字段名 ENUM(‘值1’,‘值2’...‘值n’)
字段名指將要定義的字段,值n指枚舉列表中的第n個值。ENUM類型的字段在取值時,只能在指定的枚舉列表中取值,而且一次只能取一個。如果創建的成員中有空格時,其尾部的空格將自動被刪除。ENUM值在內部用整數表示,每個枚舉值均有一個索引:列表值所允許的成員值從1開始編號,MySQL存儲的就是這個索引編號。枚舉最多可以有65535個元素。
例如:定義ENUM類型的列(‘first’,’second’,’third’),該列可以取的值和每個值的索引如下:
值
索引
NULL
NULL
“
0
first
1
second
2
third
3