mysql字符串類(lèi)型

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

1.?CHAR和VARCHAR類(lèi)型

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

CHAR和VARCHAR類(lèi)型聲明的長(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)行大小寫(xiě)轉(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類(lèi)。這說(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類(lèi)型

BINARY和VARBINARY類(lèi)類(lèi)似于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ù)類(lèi)型不同于CHAR BINARY和VARCHAR BINARY數(shù)據(jù)類(lèi)型。對(duì)于后一種類(lèi)型,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精品国产在热久久无毒不卡| 精品人妻久久久久久888| 色偷偷91久久综合噜噜噜噜| 亚洲欧美成人久久综合中文网 | 精品无码久久久久久国产| 久久综合亚洲色HEZYO国产| 综合久久精品色| 久久99精品国产99久久6男男| 亚洲欧美成人久久综合中文网| 2021少妇久久久久久久久久| 亚洲国产精品成人久久蜜臀| 国产精品久久影院| 亚洲午夜久久久久久久久久 | 久久精品久久久久观看99水蜜桃| 69久久精品无码一区二区| 狠狠色丁香久久婷婷综合_中| 精品999久久久久久中文字幕| 久久伊人精品一区二区三区| 久久国产精品视频| 国产精品九九九久久九九| 久久久久久免费视频| 久久久人妻精品无码一区| 国产成人久久AV免费| 热re99久久6国产精品免费| 亚洲精品乱码久久久久久不卡| 99久久国产热无码精品免费久久久久| 亚洲va久久久噜噜噜久久| 99久久香蕉国产线看观香| 香蕉久久AⅤ一区二区三区| 久久久精品免费国产四虎| 亚洲AV无一区二区三区久久 | 香蕉久久夜色精品国产2020| 99久久无码一区人妻| 91精品国产高清久久久久久io| 久久久久99精品成人片欧美| 综合网日日天干夜夜久久 | 色婷婷综合久久久中文字幕| 久久精品国产色蜜蜜麻豆| 久久久这里只有精品加勒比| 亚洲日本久久久午夜精品| 久久亚洲国产精品成人AV秋霞|