欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 5.7常見數(shù)據(jù)類型

 更新時(shí)間:2021年07月15日 11:36:35   作者:敖胤  
這篇文章主要介紹了MySQL 5.7數(shù)據(jù)類型詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

——《深入淺出MySQL(第二版)》筆記

數(shù)值類型

整數(shù)類型 字節(jié) 最小值 最大值
TINYINT 1 有符號(hào) -128;無符號(hào) 0 有符號(hào) 127;無符號(hào) 255
SMALLINT 2 有符號(hào) -2^16;無符號(hào) 0 有符號(hào) 2^16-1;無符號(hào) 2^17-1
MEDIUMINT 3 有符號(hào) -2^24;無符號(hào) 0 有符號(hào) 2^24-1;無符號(hào) 2^25-1
INT\INTEGER 4 有符號(hào) -2^32;無符號(hào) 0 有符號(hào) 2^32-1;無符號(hào) 2^33-1
BIGINT 8 有符號(hào) -2^64;無符號(hào) 0 有符號(hào) 2^64-1;無符號(hào) 2^65-1

浮點(diǎn)類型 字節(jié) 最大值 最小值
FLOAT 4
DOUBLE 8

定點(diǎn)數(shù)類型 字節(jié) 描述
DEC(M,D)\DECIMAL(M,D) M+2 最大值取值范圍與DOUBLE相同,給定DECIMAL的有效取值范圍由M和D決定

位類型 字節(jié) 最小值 最大值
BIT(M) 1~8 BIT(1) BIT(8)

整數(shù)類型

對(duì)于整數(shù)類型,MySQL支持在類型名稱后面使用(n)的方式指定顯示寬度,例如int(5)表示當(dāng)數(shù)值寬度小于5位時(shí),在數(shù)字前面填滿寬度,如果不顯示指定寬度則默認(rèn)為int(11)。一般配合zerofill使用,就是用'0'填充。

示例:

--創(chuàng)建表t1,有id1和id2兩個(gè)字段,指定數(shù)值寬度分別為int和int(5)
mysql> create table t1 (id1 int,id2 int(5));
mysql> desc t1;

--在id1和id2中都插入數(shù)值1
mysql> insert into t1 values (1,1);
mysql> select * from t1;

--分別給id1和id2字段增加zerofill參數(shù)
mysql> alter table t1 modify id1 int zerofill;
mysql> alter table t1 modify id2 int(5) zerofill;

設(shè)置了寬度限制后,如果插入大于寬度限制的值,不會(huì)對(duì)插入的數(shù)據(jù)有任何影響,還是按照類型的書記精度進(jìn)行保存。這時(shí),寬度格式實(shí)際已經(jīng)沒有意義,左邊不會(huì)再填充任何的“0”字符。

--向表t1的id1中插入1,id2中插入12345678
mysql> insert into t1 values(1,12345678);
mysql> select * from t1;

所有的整數(shù)類型都有一個(gè)可選屬性UNSIGNED(無符號(hào)),如果需要在字段里面保存非負(fù)數(shù)或者需要較大的上限值,可以用此選項(xiàng)。而當(dāng)一個(gè)列指定為zerofill,則MySQL自動(dòng)為該列添加UNSIGNED屬性。

另外,整數(shù)類型還有一個(gè)獨(dú)有的AUTO_INCREMENT屬性,表示該列的值是自增型。AUTO_INCREMENT值一般從1開始,每行增加1。在插入NULL到一個(gè)AUTO_INCREMENT列時(shí),MySQL插入一個(gè)比該列當(dāng)前最大值大1的值。一個(gè)表中最多只能有一個(gè)列是AUTO_INCREMENT的。

對(duì)于任何想要使用AUTO_INCREMENT的列,應(yīng)該定義為NOT NULL,并定義為UNIQUE。

浮點(diǎn)類型

對(duì)于小數(shù)的表示,MySQL分為浮點(diǎn)數(shù)和定點(diǎn)數(shù)兩種。浮點(diǎn)數(shù)包括float(單精度)和double(雙精度),而定點(diǎn)數(shù)只有decimal一種。定點(diǎn)數(shù)在MySQL內(nèi)部以字符串形式存放,比浮點(diǎn)數(shù)更精確,適合用來表示貨幣等精度高的數(shù)據(jù)。

浮點(diǎn)數(shù)和定點(diǎn)數(shù)都可以用類型名稱后加"(M,D)"的方式來進(jìn)行表示,"(M,D)"表示該值一共顯示M位,小數(shù)有D位。MySQL保存浮點(diǎn)值時(shí)對(duì)超出位采用的是四舍五入的方式。因此如果在float(5,3)中插入123.006,則保存的值為123.01。float和double在不指定精度時(shí),默認(rèn)按照實(shí)際硬件和操作系統(tǒng)來決定;而decimal不指定時(shí),默認(rèn)整數(shù)位為10,小數(shù)位為0。

示例:

--創(chuàng)建表tf,分別將id1,id2,id3字段設(shè)置為float(5,2),double(5,2),decimal(5,2)
mysql> create table tf( id1 float(5,2),id2 double(5,2),id3 decimal(5,2));

--向表中三個(gè)字段分別插入數(shù)據(jù)1.23
mysql> insert into tf values(1.23,1.23,1.23);

--向表中分別插入數(shù)據(jù)1234.005
mysql> insert into tf values(1234.005,1234.005,1234.005);

--向表中分別插入數(shù)據(jù)123.005
mysql> insert into tf values(123.005,123.005,123.005);

--向表中分別插入數(shù)據(jù)123.006,123.006,123.004
mysql> insert into tf values(123.006,123.006,123.004);

--去掉表tf字段的精度,并重新插入1.23
mysql> alter table tf modify id1 float;
mysql> alter table tf modify id2 double;
mysql> alter table tf modify id3 decimal;
mysql> insert into tf values(1.23,1.23,1.23);
mysql> desc tf;

--向表中分別插入1.234567123321,1.234567123321123321,1.23234233
mysql> insert into tf values(1.234567123321,1.234567123321123321,1.23234233);

位類型

對(duì)于BIT類型,用于存放位字段值,BIT(M)可以用來存放多位二進(jìn)制數(shù),M范圍從1~64,如果不寫,默認(rèn)為1位。而直接使用SELECT命令不會(huì)看到查詢結(jié)果,需使用bin()(顯示為二進(jìn)制)函數(shù)或者hex()(顯示為16進(jìn)制)函數(shù)進(jìn)行讀取。

示例:

--創(chuàng)建表tb,定義字段id1為bit(1),id2字段為bit
mysql> create table tb(id1 bit(1),id2 bit);

--向tb中插入1,1
mysql> insert into tb values(1,1);
mysql> select * from tb;
mysql> select bin(id1),hex(id2) from tb;

數(shù)據(jù)插入bit兩類型字段時(shí),首先轉(zhuǎn)換為二進(jìn)制,如果位數(shù)允許,則成功插入;如果位數(shù)超出定義的位數(shù),則插入失敗。

時(shí)間類型

MySQL中由多種數(shù)據(jù)類型可以用于日期和時(shí)間的表示,下表是MySQL5.0中所有支持的日期和時(shí)間類型。

日期和時(shí)間類型 字節(jié) 最小值 最大值
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年某個(gè)時(shí)刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

每種時(shí)間類型都有一個(gè)有效范圍,如果超出這個(gè)范圍,在默認(rèn)的SQLMode下,系統(tǒng)會(huì)進(jìn)行錯(cuò)誤提示,并將以零值來進(jìn)行存儲(chǔ)。

數(shù)據(jù)類型

零值表示DATE0000-00-00DATETIME0000-00-00 00:00:00TIMESTAMP00000000000000TIME00:00:00YEAR0000

--創(chuàng)建表tdt
mysql> create table tdt(dt date, dttm datetime, tms timestamp,tm time,yr year);

--使用now()函數(shù)向表中插入當(dāng)前時(shí)間
mysql> insert into tdt values(now(),now(),now(),now(),now() );

--向tms中插入NULL,MySQL會(huì)自動(dòng)賦值系統(tǒng)時(shí)間
mysql> insert into tdt(tms) values(null);

MySQL只會(huì)給表中第一個(gè)TIMESTAMP字段賦值系統(tǒng)時(shí)間,如果有其他的,則賦值為0值。

--修改表tdt,增加TIMESTAMP類型的tms1列,并給tms,tms1賦值null
mysql> alter table tdt add tms1 timestamp;
mysql> desc tdt;
mysql> insert into tdt(tms,tms1) values(null,null);

TIMESTAMP有一個(gè)重要特點(diǎn),就是和失去相關(guān)。當(dāng)插入提起時(shí),會(huì)先轉(zhuǎn)換為本地時(shí)區(qū)后存放;而從數(shù)據(jù)庫取出時(shí),需要將日期轉(zhuǎn)換為本地時(shí)區(qū)后顯示。

--創(chuàng)建表tdt1,包含字段tms,dt
mysql> create table tdt1(tms timestamp,dt datetime);

--查看當(dāng)前時(shí)區(qū),并向表tdt1中插入系統(tǒng)時(shí)間
mysql> show variables like 'time_zone';
mysql> insert into tdt1 values(now(),now());

可以發(fā)現(xiàn),時(shí)區(qū)的值為SYSTEM,這個(gè)值默認(rèn)是和主機(jī)的時(shí)區(qū)一致的,因?yàn)樘幵谥袊?,這里實(shí)際是東八區(qū)(+8:00)。

--修改時(shí)區(qū)為東九區(qū),再次查看tdt1中的時(shí)間
mysql> set time_zone='+9:00';

字符串類型

MySQL中提供了多種對(duì)字符串?dāng)?shù)據(jù)的存儲(chǔ)類型,不同版本有所差異。以5.0為例,MySQL包括了CHARVARCHAR、BINARY、VARBINARY、BLOB、TEXTENUMSET等多種。

數(shù)據(jù)類型 描述即存儲(chǔ)
CHAR(M) M為0~255之間的整數(shù)
VARCHAR(M) M為0~65535之間的整數(shù),值的長度+1個(gè)字節(jié)
TINYBLOB 允許長度0~255字節(jié),值的長度+1個(gè)字節(jié)
BLOB 允許長度0~65535字節(jié),值的長度+2個(gè)字節(jié)
MEDIUMBLOB 允許長度0~167772150字節(jié),值的長度+3個(gè)字節(jié)
LONGBLOB 允許長度0~4294967295字節(jié),值的長度+4個(gè)字節(jié)
TINYTEXT 允許長度0~255字節(jié),值的長度+1個(gè)字節(jié)
TEXT 允許長度0~65535字節(jié),值的長度+2個(gè)字節(jié)
MEDIUMTEXT 允許長度0~167772150字節(jié),值的長度+3個(gè)字節(jié)
LONGTEXT 允許長度0~4294967295字節(jié),值的長度+4個(gè)字節(jié)
VARBINARY(M) 允許長度0~M個(gè)字節(jié)的變長字節(jié)字符串,值的長度+1個(gè)字節(jié)
BINARY(M) 允許長度0~M個(gè)字節(jié)的定長字節(jié)字符串

方法

CHAR和VARCHAR

兩者很類似,都用來保存MySQL中較短的字符串。二者主要區(qū)別在于存儲(chǔ)方式的不同:CHAR列的長度固定為創(chuàng)建表時(shí)聲明的長度;而VARCHAR列中的值為可變長字符串。在檢索時(shí),CHAR會(huì)刪除尾部的空格,而VARCHAR不會(huì)。

--創(chuàng)建表tc,包含兩個(gè)字段ch(char(6))和vc(varchar(6))
mysql> create table tc (ch char(6),vc varchar(6));
--向ch和vc字段插入'abc   '
mysql> insert into tc values('abc   ','abc   ');
--查詢字段長度
mysql> select length(ch),length(vc) from tc;

BINARY和VARBINARY

類似于CHAR和VARCHAR,不同的是它們存儲(chǔ)的是二進(jìn)制的字符串。

--創(chuàng)建表tbc,包含字段bc(binary(6))、vbc(varbinary(6))
mysql> create table tbc (bc binary(6),vbc varbinary(6));
--向表中插入數(shù)據(jù)('a  ','a  ')
mysql> insert into tbc values('a  ','a  ');
--查看字段值長度
mysql> select length(bc),length(vbc) from tbc;

當(dāng)保存BINARY值時(shí),MySQL通過在值的最后填充0x00(零字節(jié))以達(dá)到指定的字段定義長度。

--通過hex()函數(shù)查看tbc中數(shù)據(jù)的保存
mysql> select length(bc),length(vbc) from tbc;

ENUM類型

枚舉類型,它的值范圍需要在創(chuàng)建表時(shí)通過枚舉方式顯示指定,對(duì)1255個(gè)成員的枚舉,需要1個(gè)字節(jié)存儲(chǔ);對(duì)于25665535個(gè)成員,需要2個(gè)字節(jié)存儲(chǔ)。最多允許有65535個(gè)成員。

--創(chuàng)建表te,包含字段f1(enum('a','b','c'))
mysql> create table te(f1 enum('a','b','c'));
--向表中插入幾條記錄
mysql> insert into te values('a'),('B'),('3'),(null);

ENUM是忽略大小寫的。還支持使用下標(biāo)(從1開始,下標(biāo)越界時(shí)報(bào)錯(cuò))的方式插入數(shù)據(jù)。特殊值'0'表示一個(gè)空值。

SET類型

SET和ENUM非常類似,也是一個(gè)字符串對(duì)象,里面可以包含0~64個(gè)成員。根據(jù)成員個(gè)數(shù)不同,存儲(chǔ)也有所不同。

1~8個(gè)成員的集合,占1個(gè)字節(jié)

9~16個(gè)成員的集合,占2個(gè)字節(jié)

17~24個(gè)成員的集合,占3個(gè)字節(jié)

25~32個(gè)成員的集合,占4個(gè)字節(jié)

32~64個(gè)成員的集合,占8個(gè)字節(jié)

而且,SET類型一次可以選擇多個(gè)成員。

--創(chuàng)建表ts,包含字段f1(set())
mysql> create table ts (f1 set('a','b','c','d'));
mysql> insert into ts values('a,b'),('a,d'),('b,c,d');

--向表中插入數(shù)據(jù)('a,b,a,c,d,d')
mysql> insert into ts values('a,b,a,c,d,d');

SET類型可以從允許值集合中選擇任意個(gè)元素進(jìn)行組合,所以對(duì)于輸入的值只要在允許值的組合范圍內(nèi),都可以正確的記錄到SET類型的列中。對(duì)于超出允許范圍的值,報(bào)錯(cuò)。而有重復(fù)成員的集合,將自動(dòng)去重。

到此這篇關(guān)于MySQL 5.7常見數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL權(quán)限USAGE和ALL PRIVILEGES的用法

    MySQL權(quán)限USAGE和ALL PRIVILEGES的用法

    本文主要介紹了MySQL權(quán)限USAGE和ALL PRIVILEGES的用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • MySQL通過DQL實(shí)現(xiàn)對(duì)數(shù)據(jù)庫數(shù)據(jù)的條件查詢

    MySQL通過DQL實(shí)現(xiàn)對(duì)數(shù)據(jù)庫數(shù)據(jù)的條件查詢

    這篇文章給大家介紹了MySQL如何通過DQL進(jìn)行數(shù)據(jù)庫數(shù)據(jù)的條件查詢,文中通過代碼示例和圖文結(jié)合介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • mysql登錄遇到ERROR 1045問題解決方法

    mysql登錄遇到ERROR 1045問題解決方法

    mysql登錄時(shí)出現(xiàn)了錯(cuò)誤:ERROR 1045: Access denied for user,究竟是什么原因呢?接下來為你詳細(xì)介紹下,感興趣的你可以參考下哈,或許可以幫助到你
    2013-03-03
  • mysql 8.0.29 卸載問題小結(jié)

    mysql 8.0.29 卸載問題小結(jié)

    近我將筆記本重裝了,為了保留之前的程序,我把相關(guān)的注冊(cè)表和環(huán)境備份了下來,重裝之后重新導(dǎo)入成功再現(xiàn)了部分軟件,下面給大家分享mysql 8.0.29 卸載問題記錄,感興趣的朋友一起看看吧
    2024-04-04
  • 詳解mysql 獲取當(dāng)前日期及格式化

    詳解mysql 獲取當(dāng)前日期及格式化

    本篇文章主要介紹了mysql 獲取當(dāng)前日期及格式化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • mysql?sock文件存儲(chǔ)了什么信息

    mysql?sock文件存儲(chǔ)了什么信息

    這篇文章主要為大家介紹了mysql?sock文件存儲(chǔ)了什么信息的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 淺談MySQL索引優(yōu)化分析

    淺談MySQL索引優(yōu)化分析

    這篇文章主要介紹了淺談MySQL索引優(yōu)化分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • mysql如何顯示longblob解決方案

    mysql如何顯示longblob解決方案

    這篇文章主要為大家介紹了mysql如何顯示longblob解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用示例小結(jié)

    MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用示例小結(jié)

    在MySQL中,DATEDIFF()函數(shù)和TIMESTAMPDIFF()函數(shù)用于計(jì)算日期和時(shí)間之間的差異,TIMESTAMPDIFF()函數(shù)返回的結(jié)果是整數(shù),但你可以通過在計(jì)算過程中使用適當(dāng)?shù)某▉慝@得所需的小數(shù)部分,本文介紹MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用,感興趣的朋友一起看看吧
    2023-12-12
  • 如何避免mysql啟動(dòng)時(shí)錯(cuò)誤及sock文件作用分析

    如何避免mysql啟動(dòng)時(shí)錯(cuò)誤及sock文件作用分析

    這篇文章主要為大家介紹了在mysql啟動(dòng)過程中遇到錯(cuò)誤時(shí)sock文件作用的分析詳解,以及如何避免發(fā)生錯(cuò)誤,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01

最新評(píng)論