尚狐網絡解析MySQL數據類型CHAR(M), VARCHAR(M)區别

Time:2021/07/12 11:04:16   Click:

MYSQL使用最廣泛,裡(lǐ)面(miàn)的技巧知識也很多,今天尚狐網絡主編就(jiù)爲大家解析一下兩(liǎng)個類型的區别,char及varchar...                        


一、CHAR(M)


CHAR(M)定義的列的長(cháng)度爲固定的,M取值可以爲0~255之間,當保存CHAR值時(shí),在它們的右邊填充空格以達到指定的長(cháng)度。當檢索到CHAR值時(shí),尾部的空格被(bèi)删除掉。在存儲或檢索過(guò)程中不進(jìn)行大小寫轉換。

CHAR存儲定長(cháng)數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那麼(me)不論你存儲的數據是否達到了10個字節,都(dōu)要占去10個字節的空間,不足的自動用空格填充。


二、VARCHAR(M)


VARCHAR(M)定義的列的長(cháng)度爲可變長(cháng)字符串,M取值可以爲0~65535之間,(VARCHAR的最大有效長(cháng)度由最大行大小和使用的字符集确定。整體最大長(cháng)度是65,532字節)。


VARCHAR值保存時(shí)隻保存需要的字符數,另加一個字節來記錄長(cháng)度(如果列聲明的長(cháng)度超過(guò)255,則使用兩(liǎng)個字節)。

VARCHAR值保存時(shí)不進(jìn)行填充。當值保存和檢索時(shí)尾部的空格仍保留,符合标準SQL。varchar存儲變長(cháng)數據,但存儲效率沒(méi)有CHAR高。如果一個字段可能(néng)的值是不固定長(cháng)度的,我們隻知道(dào)它不可能(néng)超過(guò)10個字符,


把它定義爲 VARCHAR(10)是最合算的。VARCHAR類型的實際長(cháng)度是它的值的實際長(cháng)度+1。爲什麼(me)"+1"呢?這(zhè)一個字節用于保存實際使用了多大的長(cháng)度。從空間上考慮,用varchar合适;從效率上考慮,用char合适,關鍵是根據實際情況找到權衡點。


三、CHAR(M), VARCHAR(M)不同之處


CHAR和VARCHAR最大的不同就(jiù)是一個是固定長(cháng)度,一個是可變長(cháng)度。由于是可變長(cháng)度,因此實際存儲的時(shí)候是實際字符串再加上一個記錄字符串長(cháng)度的字節(如果超過(guò)255則需要兩(liǎng)個字節)。如果分配給CHAR或VARCHAR列的值超過(guò)列的最大長(cháng)度,則對(duì)值進(jìn)行裁剪以使其适合。如果被(bèi)裁掉的字符不是空格,則會(huì)産生一條警告。如果裁剪非空格字符,則會(huì)造成(chéng)錯誤(而不是警告)并通過(guò)使用嚴格SQL模式禁用值的插入。


TOP

錦江區聚格樂享網絡工作室@2012 版權所有
蜀ICP備12016524号-2

立即咨詢
成(chéng)都(dōu)網站建設,成(chéng)都(dōu)做網站,錦江區聚格樂享網絡工作室
40f13d50b73e104f832ed1b719ae6935