MySQL數(shù)據(jù)庫(kù)varchar的限制規(guī)則說(shuō)明
MySQL數(shù)據(jù)庫(kù)中varchar最大長(zhǎng)度是多少?其實(shí)這不是一個(gè)固定的數(shù)字,varchar的長(zhǎng)度是有限制規(guī)則的。本文我們就來(lái)介紹一下MySQL數(shù)據(jù)庫(kù)中varchar的限制規(guī)則,并以一個(gè)實(shí)際的例子對(duì)限制規(guī)則進(jìn)行了說(shuō)明,接下來(lái)就讓我們一起來(lái)了解一下這部分內(nèi)容。
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)度限制
字符類(lèi)型若為gbk,每個(gè)字符最多占2個(gè)字節(jié),最大長(zhǎng)度不能超過(guò)32766;
字符類(lèi)型若為utf8,每個(gè)字符最多占3個(gè)字節(jié),最大長(zhǎng)度不能超過(guò)21845。
若定義的時(shí)候超過(guò)上述限制,則varchar字段會(huì)被強(qiáng)行轉(zhuǎn)為text類(lèi)型,并產(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è)值,則提示ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.YouhavetochangesomecolumnstoTEXTorBLOBs。
2、計(jì)算例子
舉兩個(gè)例說(shuō)明一下實(shí)際長(zhǎng)度的計(jì)算。
a)若一個(gè)表只有一個(gè)varchar類(lèi)型,如定義為createtablet4(cvarchar(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è)表定義為createtablet4(cint,c2char(30),c3varchar(N))charset=utf8;則此處N的最大值為(65535-1-2-4-30*3)/3=21812。
減1和減2的原因與上例相同;
減4的原因是int類(lèi)型的c占4個(gè)字節(jié);
減30*3的原因是char(30)占用90個(gè)字節(jié),編碼是utf8。
如果varchar超過(guò)上述的b規(guī)則,被強(qiáng)制轉(zhuǎn)成text類(lèi)型,則每個(gè)字段占用定義長(zhǎng)度為11字節(jié),當(dāng)然這已經(jīng)不是“varchar”了。
關(guān)于MySQL數(shù)據(jù)庫(kù)中varchar的限制規(guī)則的知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
- mysql中char與varchar的區(qū)別分析
- php判斷輸入不超過(guò)mysql的varchar字段的長(zhǎng)度范圍
- Mysql varchar大小長(zhǎng)度問(wèn)題介紹
- mysql VARCHAR的最大長(zhǎng)度到底是多少
- mysql update語(yǔ)句的用法詳解
- php+MySQL判斷update語(yǔ)句是否執(zhí)行成功的方法
- mysql如何處理varchar與nvarchar類(lèi)型中的特殊字符
- mysql中You can’t specify target table for update in FROM clause錯(cuò)誤解決方法
- MySQL中把varchar類(lèi)型轉(zhuǎn)為date類(lèi)型方法詳解
相關(guān)文章
mysql時(shí)間戳格式化函數(shù)from_unixtime使用的簡(jiǎn)單說(shuō)明
mysql中的FROM_UNIXTIME函數(shù)可以數(shù)據(jù)庫(kù)中整型類(lèi)的時(shí)間戳格式化為字符串的日期時(shí)間格式,下面這篇文章主要給大家介紹了關(guān)于mysql時(shí)間戳格式化函數(shù)from_unixtime使用的簡(jiǎn)單說(shuō)明,需要的朋友可以參考下2022-08-08MySQL通過(guò)DQL實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的條件查詢
這篇文章給大家介紹了MySQL如何通過(guò)DQL進(jìn)行數(shù)據(jù)庫(kù)數(shù)據(jù)的條件查詢,文中通過(guò)代碼示例和圖文結(jié)合介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01探討:MySQL中如何查詢當(dāng)前正在運(yùn)行的SQL語(yǔ)句
本篇文章是對(duì)在MySQL中如何查詢當(dāng)前正在運(yùn)行的SQL語(yǔ)句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06