mysql字符串類型

字符串類型指char、varchar、binary、varbinary、blob、text、enum和set。該節(jié)描述了這些類型如何工作以及如何在查詢中使用這些類型。

1.?CHAR和VARCHAR類型

CHAR和VARCHAR類型類似,但它們保存和檢索的方式不同。它們的最大長(zhǎng)度和是否尾部空格被保留等方面也不同。在存儲(chǔ)或檢索過(guò)程中不進(jìn)行大小寫轉(zhuǎn)換。

CHAR和VARCHAR類型聲明的長(zhǎng)度表示你想要保存的最大字符數(shù)。例如,CHAR(30)可以占用30個(gè)字符。

CHAR列的長(zhǎng)度固定為創(chuàng)建表時(shí)聲明的長(zhǎng)度。長(zhǎng)度可以為從0到255的任何值。當(dāng)保存CHAR值時(shí),在它們的右邊填充空格以達(dá)到指定的長(zhǎng)度。當(dāng)檢索到CHAR值時(shí),尾部的空格被刪除掉。在存儲(chǔ)或檢索過(guò)程中不進(jìn)行大小寫轉(zhuǎn)換。

VARCHAR列中的值為可變長(zhǎng)字符串。長(zhǎng)度可以指定為0到65,535之間的值。(VARCHAR的最大有效長(zhǎng)度由最大行大小和使用的字符集確定。整體最大長(zhǎng)度是65,532字節(jié))。

同CHAR對(duì)比,VARCHAR值保存時(shí)只保存需要的字符數(shù),另加一個(gè)字節(jié)來(lái)記錄長(zhǎng)度(如果列聲明的長(zhǎng)度超過(guò)255,則使用兩個(gè)字節(jié))。

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

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

下面的表顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結(jié)果,說(shuō)明了CHAR和VARCHAR之間的差別:

值 ? ?CHAR(4) ? ?存儲(chǔ)需求 ? ?VARCHAR(4) ? ?存儲(chǔ)需求 ? ?

” ? ?‘????‘ ? ?4個(gè)字節(jié) ? ?” ? ?1個(gè)字節(jié) ? ?

‘ab’ ? ?‘ab??‘ ? ?4個(gè)字節(jié) ? ?‘ab ‘ ? ?3個(gè)字節(jié) ? ?

‘abcd’ ? ?‘abcd’ ? ?4個(gè)字節(jié) ? ?‘abcd’ ? ?5個(gè)字節(jié) ? ?

‘abcdefgh’ ? ?‘abcd’ ? ?4個(gè)字節(jié) ? ?‘abcd’ ? ?5個(gè)字節(jié) ? ?

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

從CHAR(4)和VARCHAR(4)列檢索的值并不總是相同,因?yàn)闄z索時(shí)從CHAR列刪除了尾部的空格。通過(guò)下面的例子說(shuō)明該差別:

mysql>?CREATE?TABLE?vc?(v?VARCHAR(4),?c?CHAR(4));Query?OK,?0?rows?affected?(0.02?sec)  mysql>?INSERT?INTO?vc?VALUES?('ab??',?'ab??');Query?OK,?1?row?affected?(0.00?sec)  mysql>?SELECT?CONCAT(v,?'+'),?CONCAT(c,?'+')?FROM?vc;  +----------------+----------------+  |?CONCAT(v,?'+')?|?CONCAT(c,?'+')?|  +----------------+----------------+  |?ab??+??????????|?ab+????????????|  +----------------+----------------+  1?row?in?set?(0.00?sec)

根據(jù)分配給列的字符集校對(duì)規(guī)則對(duì)CHAR和VARCHAR列中的值進(jìn)行排序和比較。

請(qǐng)注意所有MySQL校對(duì)規(guī)則屬于PADSPACE類。這說(shuō)明在MySQL中的所有CHAR和VARCHAR值比較時(shí)不需要考慮任何尾部空格。例如:

mysql>?CREATE?TABLE?names?(myname?CHAR(10),?yourname?VARCHAR(10));Query?OK,?0?rows?affected?(0.09?sec)  mysql>?INSERT?INTO?names?VALUES?('Monty?',?'Monty?');Query?OK,?1?row?affected?(0.00?sec)    mysql>?SELECT?myname?=?'Monty??',?yourname?=?'Monty??'?FROM?names;  +--------------------+----------------------+  |?myname?=?'Monty??'?|?yourname?=?'Monty??'?|  +--------------------+----------------------+  |??????????????????1?|????????????????????1?|  +--------------------+----------------------+  1?row?in?set?(0.00?sec)

請(qǐng)注意所有MySQL版本均如此,并且它不受SQL服務(wù)器模式的影響。

對(duì)于尾部填充字符被裁剪掉或比較時(shí)將它們忽視掉的情形,如果列的索引需要唯一的值,在列內(nèi)插入一個(gè)只是填充字符數(shù)不同的值將會(huì)造成復(fù)制鍵值錯(cuò)誤。

CHAR BYTE是CHAR BINARY的別名。這是為了保證兼容性。

ASCII屬性為CHAR列分配latin1字符集。UNICODE屬性分配ucs2字符集。

2.?BINARY和VARBINARY類型

BINARY和VARBINARY類類似于CHAR和VARCHAR,不同的是它們包含二進(jìn)制字符串而不要非二進(jìn)制字符串。也就是說(shuō),它們包含字節(jié)字符串而不是字符字符串。這說(shuō)明它們沒(méi)有字符集,并且排序和比較基于列值字節(jié)的數(shù)值值。

BINARY和VARBINARY允許的最大長(zhǎng)度一樣,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的長(zhǎng)度是字節(jié)長(zhǎng)度而不是字符長(zhǎng)度。

BINARY和VARBINARY數(shù)據(jù)類型不同于CHAR BINARY和VARCHAR BINARY數(shù)據(jù)類型。對(duì)于后一種類型,BINARY屬性不會(huì)將列視為二進(jìn)制字符串列。相反,它致使使用列字符集的二元 校對(duì)規(guī)則,并且列自身包含非二進(jìn)制字符字符串而不是二進(jìn)制字節(jié)字符串。例如CHAR(5) BINARY被視為CHAR(5) CHARACTER SET latin1 COLLATE latin1_bin,假定默認(rèn)字符集是latin1。這不同于BINARY(5),它保存5字節(jié)二進(jìn)制字符串,沒(méi)有字符集或 校對(duì)規(guī)則。

當(dāng)保存BINARY值時(shí),在它們右邊填充值以達(dá)到指定長(zhǎng)度。填充值是0x00(零字節(jié))。插入值時(shí)在右側(cè)添加0x00?on,并且選擇時(shí)不刪除尾部的字節(jié)。比較時(shí)所有字節(jié)很重要,包括ORDER BY和DISTINCT操作。比較時(shí)0x00字節(jié)和空格是不同的,0x00

例如:對(duì)于一個(gè)BINARY(3)列,當(dāng)插入時(shí)?‘a’?變?yōu)?‘a?

久久99精品久久久久久hb无码| 久久久久中文字幕| 精品视频久久久久| 麻豆av久久av盛宴av| 久久99精品久久久久久久不卡| 国产精品午夜久久| 久久亚洲私人国产精品| 久久99精品久久久久久水蜜桃| 伊人久久大香线蕉AV一区二区| 国产亚洲精久久久久久无码| 久久久久亚洲精品中文字幕| 久久水蜜桃亚洲av无码精品麻豆| 久久久受www免费人成| 精品无码久久久久国产| 久久频这里精品99香蕉久| 亚洲伊人久久大香线蕉苏妲己| 久久精品国产亚洲αv忘忧草| 久久夜色tv网站| 国产精品久久久久久久久免费| 色老头网站久久网| 久久综合伊人77777麻豆| 伊人丁香狠狠色综合久久| 久久精品a亚洲国产v高清不卡| 久久丝袜精品中文字幕| 精品无码久久久久久久动漫| …久久精品99久久香蕉国产| 色诱久久久久综合网ywww| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 2021国产精品久久精品| 国产一区二区精品久久凹凸 | 久久精品国产色蜜蜜麻豆| 日韩十八禁一区二区久久| 66精品综合久久久久久久| 97久久天天综合色天天综合色hd| av色综合久久天堂av色综合在| 亚洲国产精品无码久久九九| 久久天天躁狠狠躁夜夜2020老熟妇| 久久久99精品一区二区| 思思久久99热只有频精品66| 久久久久久久精品成人热色戒| 久久夜色精品国产亚洲|