日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

MySQL数据类型一

發(fā)布時(shí)間:2024/6/21 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据类型一 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于MySQL數(shù)據(jù)類型,平時(shí)用的最多的是varchar、datetime、enum。今天好好研究一下MySQL數(shù)據(jù)類型。

轉(zhuǎn)自:https://www.cnblogs.com/Caveolae/p/7058890.html

MySQL支持多種類型,大致可以分為三類:數(shù)值、日期/時(shí)間和字符串(字符)類型。

1.數(shù)值

1.1整數(shù)類型

1.2定點(diǎn)數(shù)

DECIMAL和NUMERIC類型在MySQL中視為相同的類型。它們用于保存必須為確切精度的值,如:DECIMAL(6,2)取值范圍-9999.99~9999.99。

DECIMAL(M,D),M的默認(rèn)取值為10,D默認(rèn)取值為0。如果創(chuàng)建表時(shí),某字段定義為decimal類型不帶任何參數(shù),等同于decimal(10,0)。帶一個(gè)參數(shù)時(shí),D取默認(rèn)值。

M的取值范圍為1~65,取0時(shí)會(huì)被設(shè)為默認(rèn)值,超出范圍會(huì)報(bào)錯(cuò)。
D的取值范圍為0~30,而且必須<=M,超出范圍會(huì)報(bào)錯(cuò)。

1.3浮點(diǎn)數(shù)

float,double和real。他們定義方式為:FLOAT(M,D) 、 REAL(M,D) 、 DOUBLE PRECISION(M,D)。

1.4BIT

BIT(M)類型允許存儲(chǔ)M位值。M范圍為1~64,默認(rèn)為1。

2.字符串類型字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

2.1、CHAR和VARCHAR類型

CHAR列的長(zhǎng)度固定為創(chuàng)建表時(shí)聲明的長(zhǎng)度。長(zhǎng)度可以為從0到255的任何值。當(dāng)保存CHAR值時(shí),在它們的右邊填充空格以達(dá)到指定的長(zhǎng)度。當(dāng)檢索到CHAR值時(shí),尾部的空格被刪除掉,所以,我們?cè)诖鎯?chǔ)時(shí)字符串右邊不能有空格,即使有,查詢出來(lái)后也會(huì)被刪除。在存儲(chǔ)或檢索過程中不進(jìn)行大小寫轉(zhuǎn)換。所以當(dāng)char類型的字段為唯一值時(shí),添加的值是否已經(jīng)存在以不包含末尾空格(可能有多個(gè)空格)的值確定,比較時(shí)會(huì)在末尾補(bǔ)滿空格后與現(xiàn)已存在的值比較。

VARCHAR列中的值為可變長(zhǎng)字符串。長(zhǎng)度可以指定為0到65,535之間的值。同CHAR對(duì)比,VARCHAR值保存時(shí)只保存需要的字符數(shù),另加一個(gè)字節(jié)來(lái)記錄長(zhǎng)度(如果列聲明的長(zhǎng)度超過255,則使用兩個(gè)字節(jié))。

VARCHAR值保存時(shí)不進(jìn)行填充。當(dāng)值保存和檢索時(shí)尾部的空格仍保留,符合標(biāo)準(zhǔn)SQL。

如果分配給CHAR或VARCHAR列的值超過列的最大長(zhǎng)度,則對(duì)值進(jìn)行裁剪以使其適合。如果被裁掉的字符不是空格,則會(huì)產(chǎn)生警告。如果裁剪非空格字符,則會(huì)造成錯(cuò)誤(而不是警告)并通過使用嚴(yán)格SQL模式禁用值的插入。

下面顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結(jié)果:

表中最后一行的值只適用在不使用嚴(yán)格模式時(shí);如果MySQL運(yùn)行使用嚴(yán)格模式,超過列長(zhǎng)度的值不保存,并且會(huì)出現(xiàn)錯(cuò)誤。

因?yàn)榭崭竦脑颍嗤闹荡嫒氲介L(zhǎng)度都足夠的varvhar和char中,取出可能會(huì)不同,比如"a"和"a "。

2.2BINARY和VARBINARY類型

BINARY和VARBINARY類型類似于CHAR和VARCHAR類型,但是不同的是,它們存儲(chǔ)的不是字符串,而是二進(jìn)制串。所以它們沒有字符集,并且排序和比較基于列值字節(jié)的數(shù)值。

當(dāng)保存BINARY值時(shí),在它們右邊填充0x00(零字節(jié))值以達(dá)到指定長(zhǎng)度。取值時(shí)不刪除尾部的字節(jié)。比較時(shí)所有字節(jié)都很重要(因?yàn)榭崭窈?x00是不同的,0x00<空格),包括ORDER BY和DISTINCT操作。比如插入'a '會(huì)變成'a '。

對(duì)于VARBINARY,插入時(shí)不填充字符,選擇時(shí)不裁剪字節(jié)。比較時(shí)所有字節(jié)都很重要。當(dāng)類型為BINARY的字段為主鍵時(shí),應(yīng)考慮到上面介紹的存儲(chǔ)方式。

2.3BLOB和TEXT類型

BLOB是一個(gè)二進(jìn)制大對(duì)象,可以容納可變數(shù)量的數(shù)據(jù)。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長(zhǎng)度不同。有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對(duì)應(yīng)4種BLOB類型,有相同的最大長(zhǎng)度和存儲(chǔ)需求。

BLOB列被視為二進(jìn)制字符串。TEXT列被視為字符字符串,類似CHAR和BINARY。

在TEXT或BLOB列的存儲(chǔ)或檢索過程中,不存在大小寫轉(zhuǎn)換。

未運(yùn)行在嚴(yán)格模式時(shí),如果你為BLOB或TEXT列分配一個(gè)超過該列類型的最大長(zhǎng)度的值,值被截取以保證適合。如果截掉的字符不是空格,將會(huì)產(chǎn)生一條警告。使用嚴(yán)格SQL模式,會(huì)產(chǎn)生錯(cuò)誤,并且值將被拒絕而不是截取并給出警告。

在大多數(shù)方面,可以將BLOB列視為能夠足夠大的VARBINARY列。同樣,可以將TEXT列視為VARCHAR列。

BLOB和TEXT在以下幾個(gè)方面不同于VARBINARY和VARCHAR:

當(dāng)保存或檢索BLOB和TEXT列的值時(shí)不刪除尾部空格。(這與VARBINARY和VARCHAR列相同)。
比較時(shí)將用空格對(duì)TEXT進(jìn)行擴(kuò)充以適合比較的對(duì)象,正如CHAR和VARCHAR。
對(duì)于BLOB和TEXT列的索引,必須指定索引前綴的長(zhǎng)度。對(duì)于CHAR和VARCHAR,前綴長(zhǎng)度是可選的。
BLOB和TEXT列不能有默認(rèn)值。

MySQL Connector/ODBC將BLOB值定義為L(zhǎng)ONGVARBINARY,將TEXT值定義為L(zhǎng)ONGVARCHAR。

BLOB或TEXT對(duì)象的最大大小由其類型確定,但在客戶端和服務(wù)器之間實(shí)際可以傳遞的最大值由可用內(nèi)存數(shù)量和通信緩存區(qū)大小確定。你可以通過更改max_allowed_packet變量的值更改消息緩存區(qū)的大小,但必須同時(shí)修改服務(wù)器和客戶端程序。

每個(gè)BLOB或TEXT值分別由內(nèi)部分配的對(duì)象表示。

它們(TEXT和BLOB同)的長(zhǎng)度:

Tiny:最大長(zhǎng)度255個(gè)字符(2^8-1)
BLOB或TEXT:最大長(zhǎng)度65535個(gè)字符(2^16-1)
Medium:最大長(zhǎng)度16777215個(gè)字符(2^24-1)
LongText 最大長(zhǎng)度4294967295個(gè)字符(2^32-1)

實(shí)際長(zhǎng)度與編碼有關(guān),比如utf-8的會(huì)減半。

2.4ENUM

MySql中的ENUM是一個(gè)字符串對(duì)象,其值來(lái)自表創(chuàng)建時(shí)在列規(guī)定中顯式枚舉的一列值。

可以插入空字符串""和NULL:

如果你將一個(gè)非法值插入ENUM(也就是說(shuō),允許的值列之外的字符串),將插入空字符串以作為特殊錯(cuò)誤值。該字符串與“普通”空字符串不同,該字符串有數(shù)值值0。
如果將ENUM列聲明為允許NULL,NULL值則為該列的一個(gè)有效值,并且默認(rèn)值為NULL。如果ENUM列被聲明為NOT NULL,其默認(rèn)值為允許的值列的第1個(gè)元素。

值的索引規(guī)則如下:

來(lái)自列規(guī)定的允許的值列中的值從1開始編號(hào)。
空字符串錯(cuò)誤值的索引值是0。所以,可以使用下面的SELECT語(yǔ)句來(lái)找出分配了非法ENUM值的行:mysql> SELECT * FROM tbl_name WHERE enum_col=0;
NULL值的索引是NULL。

如下例:

ENUM最多可以有65,535個(gè)元素。當(dāng)創(chuàng)建表時(shí),ENUM成員值的尾部空格將自動(dòng)被刪除。

使用方式:

CREATE TABLE shirts(
name VARCHAR(40),
size ENUM('x-small','small','medium','large','x-large')
);

INSERT INTO shirts(name,size)VALUES('dress shirt','large'),('t-shirt','medium'),('polo shirt','small');

SELECT name,size FROM shirts WHERE size='medium';

UPDATE shirts SET size='small'WHERE size='large';

如果將返回值設(shè)為數(shù)值,將返回索引值,比如講上面的查詢語(yǔ)句改為:

SELECT name,size+0FROM shirts WHERE size='medium';

如果將一個(gè)數(shù)字保存到ENUM列,數(shù)字被視為索引,并且保存的值是該索引對(duì)應(yīng)的枚舉成員(這不適合LOAD DATA,它將所有輸入視為字符串)。不建議使用類似數(shù)字的枚舉值來(lái)定義一個(gè)ENUM列,因?yàn)檫@很容易引起混淆。

ENUM值根據(jù)索引編號(hào)進(jìn)行排序)。例如,對(duì)于ENUM('a','b'),'a'排在'b'前面,但對(duì)于ENUM('b','a'),'b'排在'a'前面??兆址旁诜强兆址懊妫⑶襈ULL值排在所有其它枚舉值前面。要想防止意想不到的結(jié)果,按字母順序規(guī)定ENUM列。還可以使用GROUP BY CAST(col AS CHAR)或GROUP BY CONCAT(col)來(lái)確保按照詞匯對(duì)列進(jìn)行排序而不是用索引數(shù)字。

總結(jié)

以上是生活随笔為你收集整理的MySQL数据类型一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。