1. 程式人生 > >MySQL資料庫的基本資料型別

MySQL資料庫的基本資料型別

整數型別

數值型資料型別主要用來儲存數字,包含的型別有:

TINYINT、SMALLINT、MEDIUMINT、 INT(INTEGER)、 BIGINT。

下面通過一個例子來檢視各種型別的所佔有的資料空間,注意,我使用的版本是mysql5.6.28,可以通過下面的命令來檢視:

clip_image001

建立表tmp1,其中欄位x、y、z、m、n資料型別依次為TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,SQL語句如下:

CREATE TABLE tmp1 ( x TINYINT, y SMALLINT, z MEDIUMINT, m INT, n BIGINT );

執行成功之後,便用DESC查看錶結構,結果如下:

DESC tmp1;

clip_image002

可以看到,TINGINT佔1個位元組,SMALLINT佔2個位元組,MEDIUMINT佔3個位元組,INT佔4個位元組,BIGINT佔8個位元組

浮點數型別與定點數型別

MySQL使用浮點數和定點數來表示小數。包含的型別有:

浮點型別:FLOAT、DOUBLE。

定點型別:DECIMAL。

測試案例:

建立表tmp2,其中欄位x、y、z資料型別依次為FLOAT(5,1)、DOUBLE(5,1)和DECIMAL(5,1),向表中插入資料5.12、5.15和5.123,SQL語句如下:

CREATE TABLE tmp2 ( x FLOAT(5,1), y DOUBLE
(5,1), z DECIMAL(5,1) );

向表中插入資料:

INSERT INTO tmp2 VALUES(5.12, 5.15, 5.123);

clip_image003

可以看到在插入資料時,MySQL給出了一個警告資訊,使用SHOW WARNINGS;語句檢視警告資訊:

SHOW WARNINGS;

clip_image004

說‘z’這一列的資料被截斷了,使用下面的SQL語句看看剛剛插入的資料:

SELECT * FROM tmp2;

clip_image005

日期與時間型別

MySQL中有多種表示日期的資料型別。它們是:

DATETIME、DATE、TIMESTAMP、TIME和YEAR。

YEAR型別測試案例:

建立資料表tmp3,定義資料型別為YEAR的欄位y,向表中插入值2010,’2010’,’2166’,SQL語句如下:

首先建立表tmp3:

CREATE TABLE tmp3( y YEAR );

向表中插入資料:

INSERT INTO tmp3 values(2010),('2010');

clip_image006

可以知道,YEAR型別的資料在MySQL中是按照字串格式儲存的。檢視一下YEAR型別資料所佔用的位元組空間:

clip_image007

可以看到,MySQL中YEAR型別的資料佔用一個位元組的資料空間。

再次向表中插入資料:

INSERT INTO tmp3 values ('2166');

語句執行之後,MySQL給出了一條警告提示,使用SHOW檢視錯誤資訊:

SHOW WARNINGS;

clip_image008

可以看到,插入的第3個值2166超過了YEAR型別的取值範圍,此時不能正常的執行插入操作,檢視結果:

SELECT * FROM tmp3;

clip_image009

由結果可以看到,當插入值為數值型別的2010或者字串型別的’2010’時,都正確的儲存到了資料庫中;而當插入值’2166’時,由於超出了YEAR型別的取值範圍,因此,不能插入值。檢視資料得知,MySQL中YEAR型別的資料的取值範圍是1901~2155.這裡的YEAR是指的YEAR(4),此外,還有YEAR(2)。對於YEAR(2),其顯示年份的範圍為1970~2070。在YEAR(2)的設定下,00~69代表2000~2069年

向tmp3表中y欄位插入2位字串表示的YEAR值,分別為’0’、’00’、’77’和’10’,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp3;

向表中插入資料:

INSERT INTO tmp3 values('0'),('00'),('77'),('10');

檢視結果:

SELECT * FROM tmp3;

clip_image010

由結果可以看到,字串’0’和’00’的作用相同,分別都轉換成了2000年;’77’轉換為1977;’10’轉換為2010。

向tmp3表中y欄位插入2位數字表示表示的YEAR值,分別為0、78和11,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp3;

向表中插入資料:

INSERT INTO tmp3 values(0),(78),(11);

檢視結果:

SELECT * FROM tmp3;

clip_image011

由結果可以看到,0被轉換為0000;78被轉換為1978;11被轉換為2011。

對比兩種測試資料,可以發現:對於YEAR資料型別的資料,在進行一些特殊值插入時,以數字形式和以字串形式進行插入時得到的結果是不一樣的。

TIME型別測試案例:

建立資料表tmp4,定義資料型別為TIME的欄位t,向表中插入值’10:05:05’,’23:23’,’2 10:10’,’3 02’,’10’,SQL語句如下:

首先建立表tmp4,

CREATE TABLE tmp4( t TIME );

向表中插入資料:

INSERT INTO tmp4 values('10:05:05 '), ('23:23'), ('2 10:10'), ('3 02'),('10');

檢視結果:

SELECT * FROM tmp4;

clip_image012

由結果可以看到,’10:05:05’被轉換為10:05:05;’23:23’被轉換為23:23:00;’2 10:10’被轉換為58:10:00,’3 02’被轉換為74:00:00;’10’被轉換成00:00:10。

在使用’D HH’格式時,小時一定要使用雙位數值,如果是小於10的小時數,應在前面加0。TIME型別佔用3位元組,顯示的範圍為“-838:59:59”~“838:59:59”。有人會奇怪為什麼TIME型別的時間可以大於23。因為TIME型別不僅可以用來儲存一天中的時間,也可以用來儲存時間間隔,同時這也解釋了為什麼TIME型別也可以存在負值。和DATETIME型別一樣,TIME型別同樣可以顯示微秒時間,但是在插入時,資料庫同樣會進行截斷操作

向表tmp4中插入值’101112’,111213,’0’,107010,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp4;

向表中插入資料:

INSERT INTO tmp4 values('101112'),(111213),( '0');

再向表中插入資料:

INSERT INTO tmp4 values ( 107010);

clip_image013

可以看到,在插入資料時,MySQL給出了一個警告提示資訊,使用SHOW WARNINGS;檢視警告資訊,如下所示:

show warnings;

clip_image014

可以看到,第二次在插入記錄的時候,資料超出了範圍,原因是107010的分鐘部分超過了60,分鐘部分是不會超過60的,檢視結果:

SELECT * FROM tmp4;

clip_image015

由結果可以看到,’101112’被轉換為10:11:12;111213被轉換為11:12:13;’0’被轉換為00:00:00;107010因為是不合法的值,因此插入00:00:00。

也可以使用系統日期函式向TIME欄位列插入值。

向tmp4表中插入系統當前時間,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp4;

向表中插入資料:

INSERT INTO tmp4 values (CURRENT_TIME) ,(NOW());

檢視結果:

SELECT * FROM tmp4;

clip_image016

由結果可以看到,獲取系統當前的日期時間插入到TIME型別列,都是系統當前的日期時間值。

DATE型別資料測試案例:

建立資料表tmp5,定義資料型別為DATE的欄位d,向表中插入“YYYY-MM-DD”和“YYYYMMDD”字串格式日期,SQL語句如下:

首先建立表tmp5:

CREATE TABLE tmp5(d DATE);

向表中插入“YYYY-MM-DD”和“YYYYMMDD”格式日期:

INSERT INTO tmp5 values('1998-08-08'),('19980808'),('20101010');

檢視插入結果:

SELECT * FROM tmp5;

clip_image017

可以看到,各個不同型別的日期值都正確的插入到了資料表中。DATE佔用3位元組,可顯示的日期範圍為“1000-01-01”到“9999-12-31”。

向tmp5表中插入“YY-MM-DD”和“YYMMDD”字串格式日期,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp5;

向表中插入“YY-MM-DD”和“YYMMDD”格式日期:

INSERT INTO tmp5 values ('99-09-09'),( '990909'), ('000101') ,('111111');

檢視插入結果:

SELECT * FROM tmp5;

clip_image018

對於插入的最後一個值,為什麼不是1911-11-11或者2111-11-11之類的值呢?可以看到資料庫將其視為離現在最近的一個年份,這可能不是一個非常好的習慣。如果沒有特別的條件和要求,還是在輸入時按照標準的“YYYY-MM-DD HH:MM:SS”格式來進行。

向tmp5表中插入YY-MM-DD和YYMMDD數字格式日期,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp5;

向表中插入YY-MM-DD和YYMMDD數字格式日期:

INSERT INTO tmp5 values (99-09-09),(990909), ( 000101) ,( 111111);

檢視插入結果:

SELECT * FROM tmp5;

clip_image019

可以看到,插入的第一條資料有一個警告,但是插入成功,插入的值變為了0000-00-00

向tmp5表中插入系統當前日期,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp5;

向表中插入系統當前日期:

INSERT INTO tmp5 values( CURRENT_DATE() ),( NOW() );

檢視插入結果:

SELECT * FROM tmp5;

clip_image020

CURRENT_DATE只返回當前日期值,不包括時間部分;NOW()函式返回日期和時間值,在儲存到資料庫時,只保留了其日期部分。

MySQL允許“不嚴格”語法:任何標點符號都可以用作日期部分之間的間隔符。例如,’98-11-31’、’98.11.31’、’98/11/31’和[email protected]@31’是等價的,這些值也可以正確的插入到資料庫。

DATETIME資料型別測試案例:

建立資料表tmp6,定義資料型別為DATETIME的欄位dt,向表中插入"YYYY-MM-DD HH:MM:SS”和"YYYYMMDDHHMMSS”字串格式日期和時間值,SQL語句如下:

首先建立表tmp6:

CREATE TABLE tmp6( dt DATETIME );

向表中插入“YYYY-MM-DD HH:MM:SS”和“YYYYMMDDHHMMSS”格式日期:

INSERT INTO tmp6 values('1998-08-08 08:08:08'),('19980808080808'),('20101010101010');

檢視插入結果:

SELECT * FROM tmp6;

clip_image021

可以看到,各個不同型別的日期值都正確的插入到了資料表中。DATETIME佔用8位元組,是佔用空間最多的一種日期型別。它既顯示了日期,同時也顯示了時間。其可以表達的日期範圍為“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

在MySQL 5.5版本之前(包括5.5版本),資料庫的日期型別不能精確到微秒級別,任何的微秒數值都會被資料庫截斷。

不過MySQL資料庫提供了函式MICROSECOND來提取日期中的微秒值

clip_image022

向tmp6表中插入“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”字串格式日期和時間值,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp6;

向表中插入“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”格式日期:

INSERT INTO tmp6 values('99-09-09 09:09:09'),('990909090909'),('101010101010');

檢視插入結果:

SELECT * FROM tmp6;

clip_image023

向tmp6表中插入YYYYMMDDHHMMSS 和YYMMDDHHMMSS數字格式日期和時間值,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp6;

向表中插入YYYYMMDDHHMMSS和YYMMDDHHMMSS數字格式日期和時間:

INSERT INTO tmp6 values(19990909090909), (101010101010);

檢視插入結果:

SELECT * FROM tmp6;

clip_image024

向tmp6表中插入系統當前日期和時間值,SQL語句如下:

首先刪除表中的資料:

DELETE FROM tmp6;

向表中插入系統當前日期:

INSERT INTO tmp6 values( NOW() );

檢視插入結果:

SELECT * FROM tmp6;

clip_image025

TIMESTAMP資料型別測試案例:

建立資料表tmp7,定義資料型別為TIMESTAMP的欄位ts,向表中插入值’19950101010101’,’950505050505’,’1996-02-02 02:02:02’,’[email protected]@03 [email protected]@03’,121212121212,NOW(),SQL語句如下:

相關推薦

mysql基本資料型別 和 儲存引擎

簡單的說明 [ ]中括號中內容為可選 { }大括號中內容為必選 | 表示選擇(可以選擇其一 也可以都選擇) ; 結尾 以表格的形式顯示結果  同 \g \G 結尾 以列表的形式顯示結果 一 資料庫和儲存引擎 資料庫DATABASE 資料庫可由 字母 數字 下劃

mysql 資料庫整理——資料型別

當我們建立資料庫之後 即 create database db; 之後  我們的資料庫有許多table即表組成 表的結構這裡不說可以用一下語句檢視 desc 表名; show columns from 表名; describe 表名; show create table

Oracle資料庫基本資料型別

1.char(),定長字串; 2.varchar2(),變長字串; 3.number(),可表示整數也可表示小數,number(n):n表示的是有效數字;number(n,m)表示小數佔m位,整數佔n-m位; 4.date,日期,可以是年月日(yyyy-mm-dd),也

Mysql基本使用(登陸&退出、建立&刪除&選擇資料庫基本資料型別、建立&刪除表格等)

登入mysql資料庫 mysql -h hostname -u username -p 如何hostname是本機的話,要替換為127.0.0.1或者是localhost 例子:mysql -h localhost -uroot -p 這樣輸完之後會換行讓你輸密碼,我們也可以直接把密

Mysql基本使用(登陸&退出、建立&刪除&選擇資料庫基本資料型別、建立&刪除表格等)

登入mysql資料庫 mysql -h hostname -u username -p 如何hostname是本機的話,要替換為127.0.0.1或者是localhost 例子:mysql -h localhost -uroot -p 這樣輸完之後會換行讓你輸密碼,我

MySQL資料庫基本資料型別

整數型別 數值型資料型別主要用來儲存數字,包含的型別有: TINYINT、SMALLINT、MEDIUMINT、 INT(INTEGER)、 BIGINT。 下面通過一個例子來檢視各種型別的所佔有的資料空間,注意,我使用的版本是mysql5.6.28,可以通過下面的

MySQL資料庫資料表的基本操作

初學小建議 MySQL是不區分大小寫的,大家在初學的時候希望能養成習慣,把保留詞,關鍵字統一採用大寫的形式書寫,其他的使用小寫字母,方便區分。 初期這個習慣可能不太容易養成,但是一旦習慣,對工作的規範性會好很多,統一的規範方便大家一起工作! 選單

mysql基本資料型別和約束條件

mysql基本資料型別 1.建立表的完整語法 create table 表名(欄位1 型別[(寬度) 約束條件],欄位2 型別[(寬度) 約束條件]); # 注意:1.在同一張表中,欄位名不能相同;2.寬度和約束條件可選,欄位名和型別是必須的; # 型別:使用限制欄位必須以什麼樣的資料型別傳值 # 約束條

mysql學習【第4篇】:資料庫資料型別 資料庫資料型別

資料庫之資料型別 首先補充點了解的小知識; select * from mysql.user #顯示出來亂了 select * from mysql

MySQL學習筆記:基本資料型別與查詢操作

#客戶端將資料儲存到資料庫伺服器上的過程     1、連線到伺服器 mysql -u xxx -p xxx     2、選擇一個庫 use xxx     3、建立表或者修改表    &

mongodb基礎(mongodb簡介,基本資料型別,和關係型資料庫的對比,NOSQL資料庫的分類)

MongoDB 是一個基於分散式檔案儲存的資料庫。由C++語言編寫。旨在為WEB 應用提供可擴充套件的高效能資料儲存解決方案。MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。在這裡我們有必要先簡單介紹一下非關係型資料庫(NoSQL)。

mysql基本資料型別簡介及舉例應用

一、數值型別整型可以指定是有符號的和無符號的,預設是有符號的。可以通過UNSIGNED來說明某個欄位是無符號的。我們看一下tinyint的用法:因為-129越界,所以插入失敗。我們再看一下無符號整型:越界:這裡我們看一個引數sql_mode,對它進行設定,我們就可以得到-1這

MySQL資料庫中tinyint型別欄位讀取資料為true和false

vertx jdbc 取myaql資料也存在這樣的問題,按照如下在進行sql語句編寫時候加上*1就i可以了 今天遇到這麼一個問題,公司最近在做一個活動,然後資料庫需要建表,其中有個欄位是關於獎勵發放的狀態的欄位,結果讀取出來的值為true 一、解決讀取資料為true/

java基本資料型別初始值(預設值) ,在設計資料庫時造成的問題

        首先,看看我所遇到的問題:JSP接收資料——》對應的資料庫表對映類A——》oracle,在這個過程中的類A有一個全域性的int變數,對應JSP上的一個input,同時在oracle中設計了一個number進行儲存。在設計中我們允許在JSP上的input中不填

在Java中對mysql資料庫插入datetime型別資料

最近在做一個簡單的考勤系統的時候碰到了一個弄了我好久的問題,在我往資料庫中更新一條簽到時間的記錄的時候,我獲取的時間是沒有錯的,但是Hibernate往資料庫裡面插入的時候資料的時候,控制檯報了一大堆錯誤,而資料庫裡面也是沒有任何資料被更新的。。這就引發了異常D

使用@Convert註解將List等不是基本資料型別的變數存入的資料庫

@Convert 可將不是基本資料型別的資料按照一定的格式轉換成可存入資料庫的基本型別,類似於自動拆裝箱操作。 1、新建Converter類 2、實現javax.persistence.AttributeConverter包下的AttributeConve

MySQL中的常用基本資料型別

MySQL中常用的資料型別: varchar : 變長字串,使用時我們必須設定其長度,最大值”理論值”65535個,實際上最大隻能存65533個,但考慮到儲存的字元編碼的不同,也會有進一步的減少。比如: 如果儲存從中文gbk,則最多是65533/2個

Java中8種基本資料型別及其預設值

Java語言中有8種基本資料型別,基本情況彙總如下: Java中8種基本資料型別總結 序號 資料型別 大小/位 封裝類 預設值 可表示資料

包裝類(Integer/Boolean等、字串與基本資料型別轉化,-127-128自動裝箱入池)

為什麼要有包裝類? Object類可以接收所有引用資料型別。然而在Java中,資料型別分為基本資料型別和引用資料型別,那麼基本資料型別如何處理呢? 使用包裝類 :包裝類是將基本資料型別封裝到類中,因為Object無法接受基本資料型別,封裝成類後就可以用Object類來接收。 簡單定義一個in

Java初認識--基本資料型別(int 和byte之間賦值)預設值 型別強轉

主類和主方法 Test.java–是原始檔,原始檔必須與主類名(public class )保持一致,一個原始檔只能有一個主類 ,主方法存在與主類中。 Test.java 原始檔 主類:public class Test 主方法 : public static void main(Strin