日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

你真的了解mysql的varchar字段的長(zhǎng)度有多少嗎?

系統(tǒng) 4302 0

 今天在設(shè)計(jì)系統(tǒng)字段的時(shí)候, 發(fā)現(xiàn)自己對(duì)varchar還不夠了解.我設(shè)了一個(gè)字段.類型為VARCHER,然后我就往里面測(cè)試性了寫(xiě)了東西.發(fā)現(xiàn)沒(méi)有多少就滿了.我覺(jué)得奇怪,5.5版本以上的MYSQL不是有65535的長(zhǎng)度嗎,為什么只有這么一點(diǎn)點(diǎn)?后來(lái)才發(fā)現(xiàn),原來(lái)VARCHER的默認(rèn)長(zhǎng)度還是255,如果你想它更長(zhǎng),就得指定.還有,你不能指定它為65535,或是65534,這樣是會(huì)錯(cuò)的.原因如下:         

 1、限制規(guī)則        

 字段的限制在字段定義的時(shí)候有以下規(guī)則:   

 a)                  存儲(chǔ)限制  

 varchar 字段是將實(shí)際內(nèi)容單獨(dú)存儲(chǔ)在聚簇索引之外,內(nèi)容開(kāi)頭用1到2個(gè)字節(jié)表示實(shí)際長(zhǎng)度(長(zhǎng)度超過(guò)255時(shí)需要2個(gè)字節(jié)),因此最大長(zhǎng)度不能超過(guò)65535。   

 b)                  編碼長(zhǎng)度限制  

 字符類型若為gbk,每個(gè)字符最多占2個(gè)字節(jié),最大長(zhǎng)度不能超過(guò)32766;  

 字符類型若為utf8,每個(gè)字符最多占3個(gè)字節(jié),最大長(zhǎng)度不能超過(guò)21845。  

 若定義的時(shí)候超過(guò)上述限制,則varchar字段會(huì)被強(qiáng)行轉(zhuǎn)為text類型,并產(chǎn)生warning。   

 c)                   行長(zhǎng)度限制  

 導(dǎo)致實(shí)際應(yīng)用中varchar長(zhǎng)度限制的是一個(gè)行定義的長(zhǎng)度。 MySQL要求一個(gè)行的定義長(zhǎng)度不能超過(guò)65535。若定義的表長(zhǎng)度超過(guò)這個(gè)值,則提示  

 ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。   

 2、計(jì)算例子        

 舉兩個(gè)例說(shuō)明一下實(shí)際長(zhǎng)度的計(jì)算。   

 a)                  若一個(gè)表只有一個(gè)varchar類型,如定義為  

 create table t4(c varchar(N)) charset=gbk;  

 則此處N的最大值為(65535-1-2)/2= 32766。  

 減1的原因是實(shí)際行存儲(chǔ)從第二個(gè)字節(jié)開(kāi)始’;  

 減2的原因是varchar頭部的2個(gè)字節(jié)表示長(zhǎng)度;  

 除2的原因是字符編碼是gbk。  

    

 b)                  若一個(gè)表定義為  

 create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;  

 則此處N的最大值為 (65535-1-2-4-30*3)/3=21812  

 減1和減2與上例相同;  

 減4的原因是int類型的c占4個(gè)字節(jié);  

 減30*3的原因是char(30)占用90個(gè)字節(jié),編碼是utf8。  

    

        如果被varchar超過(guò)上述的b規(guī)則,被強(qiáng)轉(zhuǎn)成text類型,則每個(gè)字段占用定義長(zhǎng)度為11字節(jié),當(dāng)然這已經(jīng)不是“varchar”了。  



更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 新乡市| 武定县| 陕西省| 永胜县| 湘阴县| 夹江县| 静安区| 鄂尔多斯市| 阆中市| 孟州市| 晋城| 奎屯市| 钟山县| 松滋市| 邻水| 盱眙县| 玛曲县| 温州市| 石阡县| 河曲县| 江门市| 名山县| 商洛市| 临沭县| 黄陵县| 佛教| 鄢陵县| 甘德县| 天峻县| 昂仁县| 寻甸| 北京市| 井陉县| 邯郸市| 龙里县| 凤阳县| 上虞市| 巍山| 鄢陵县| 黔西| 沾益县|