一般沒有最大限制,最多也就是單字段的長度有限制,那跟字段的數(shù)據(jù)類型有關(guān),而對于數(shù)據(jù)表的大小一般不要超過2G,超過了效率會比較慢,建議分開多表存。

創(chuàng)新互聯(lián)主營西盟網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),西盟h5重慶小程序開發(fā)公司搭建,西盟網(wǎng)站營銷推廣歡迎西盟等地區(qū)企業(yè)咨詢
mysql中varchar最多能存儲65535個字節(jié)的數(shù)據(jù)。
varchar 的最大長度受限于最大行長度(max row size,65535bytes)。65535并不是一個很精確的上限,可以繼續(xù)縮小這個上限。65535個字節(jié)包括所有字段的長度,變長字段的長度標識(每個變長字段額外使用1或者2個字節(jié)記錄實際數(shù)據(jù)長度)、NULL標識位的累計。
擴展資料
1、varchar存儲規(guī)則:
mysql4.0版本以下,varchar(20),指的是20字節(jié),如果存放UTF8漢字時,只能存6個(每個漢字3字節(jié))?
mysql5.0版本以上,varchar(20),指的是20字符,無論存放的是數(shù)字、字母還是UTF8漢字(每個漢字3字節(jié)),都可以存放20個,最大大小是65532字節(jié) 。
2、varchar受編碼長度限制規(guī)則:
字符類型若為gbk,每個字符最多占2個字節(jié),最大長度不能超過32766;
字符類型若為utf8,每個字符最多占3個字節(jié),最大長度不能超過21845。
以前一直都認為有兩個字節(jié)來記錄長度(長度小也可以用一個字節(jié)記錄),所以這個問題當時覺得就挺無聊的不過后來群里有人給了解釋,突然才發(fā)現(xiàn)原來事情不是這么簡單MYSQL COMPACT格式,每條記錄有一個字節(jié)來表示NULL字段分布,如果表中有字段允許為空,則最大只能定到65532,如果沒有字段允許為空,則那個字節(jié)可以節(jié)省,最大可以定義到65533,不知道是不是這個原因于是上網(wǎng)看了些資料,又在本地做了些實驗,原來vachar的最大長度真的是不定的(根據(jù)是否有非空字段來決定)在本地做了下實驗,innodb+latin的環(huán)境
復(fù)制代碼 代碼如下:
-- success
drop table if exists test;
create table test(name varchar(65533) not null)engine=innodb DEFAULT CHARSET=latin1-- too large
drop table if exists test;
create table test(name varchar(65533))engine=innodb DEFAULT CHARSET=latin1對于第二種情況,允許空字段的時候是不能加到65533的長度的,最大只能到65532,到底應(yīng)該是引文的那種說法。
網(wǎng)上也有人做了類似的實驗,參考復(fù)制代碼 代碼如下:
name varchar(100) not null will be 1 byte (length) + up to 100 chars (latin1)name varchar(500) not null will be 2 bytes (length) + up to 500 chars (latin1)name varchar(65533) not null will be 2 bytes (length) + up to 65533 chars (latin1)name varchar(65532) will be 2 bytes (length) + up to 65532 chars (latin1) + 1 null byte總結(jié)一下,原來mysql的vachar字段的類型雖然最大長度是65535,但是并不是能存這么多數(shù)據(jù),最大可以到65533(不允許非空字段的時候),當允許非空字段的時候只能到65532。
以下是其它網(wǎng)友的補充說明:
這不是一個固定的數(shù)字。本文簡要說明一下限制規(guī)則。
strlen 計算字符串長度,一個中文當2字符
mb_strlen根據(jù)它的字符編碼模式,統(tǒng)計字符quotcount計算數(shù)組中的元素數(shù)目或?qū)ο笾械膶傩詡€數(shù)復(fù)制代碼 代碼如下:
?php
header('Content-Type:text/html;charset=UTF-8');$string1="謝春業(yè)";//定義中文字符變量
$string2="xcy";//定義英文字符變量
//直接輸出看看他們的長度
echo strlen($string1);
echo "/br";
echo strlen($string2);
echo "/br";
//用 php 多字節(jié)擴展函數(shù) mb_strlen試試看
echo mb_strlen($string1,'utf8');
echo "/br";
echo mb_strlen($string2,'utf8');
echo "/br";
?
輸出結(jié)果是:
9
3
3
3
1、限制規(guī)則
字段的限制在字段定義的時候有以下規(guī)則:
a) 存儲限制
varchar 字段是將實際內(nèi)容單獨存儲在聚簇索引之外,內(nèi)容開頭用1到2個字節(jié)表示實際長度(長度超過255時需要2個字節(jié)),因此最大長度不能超過65535。
b) 編碼長度限制
字符類型若為gbk,每個字符最多占2個字節(jié),最大長度不能超過32766;字符類型若為utf8,每個字符最多占3個字節(jié),最大長度不能超過21845。
對于英文比較多的論壇 ,使用GBK則每個字符占用2個字節(jié),而使用UTF-8英文卻只占一個字節(jié)。
若定義的時候超過上述限制,則varchar字段會被強行轉(zhuǎn)為text類型,并產(chǎn)生warning。
c) 行長度限制
導(dǎo)致實際應(yīng)用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示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、計算例子
舉兩個例說明一下實際長度的計算。
a) 若一個表只有一個varchar類型,如定義為
create table t4(c varchar(N)) charset=gbk;則此處N的最大值為(65535-1-2)/2= 32766。
減1的原因是實際行存儲從第二個字節(jié)開始';
減2的原因是varchar頭部的2個字節(jié)表示長度;
除2的原因是字符編碼是gbk。
b) 若一個表定義為
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個字節(jié);
減30*3的原因是char(30)占用90個字節(jié),編碼是utf8。
如果被varchar超過上述的b規(guī)則,被強轉(zhuǎn)成text類型,則每個字段占用定義長度為11字節(jié),當然這已經(jīng)不是“varchar”了。
mysql varchar(50) 不管中文 還是英文 都是存50個的
MySQL5的文檔,其中對varchar字段類型這樣描述:varchar(m) 變長字符串。M 表示最大列長度。M的范圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,最大有效長度是65,532字節(jié))。
為何會這般變換?真是感覺MySQL的手冊做的太不友好了,因為你要仔細的繼續(xù)往下讀才會發(fā)現(xiàn)這段描述:MySQL
5.1遵從標準SQL規(guī)范,并且不刪除VARCHAR值的尾部空格。VARCHAR保存時用一個字節(jié)或兩個字節(jié)長的前綴+數(shù)據(jù)。如果VARCHAR列聲明的長度大于255,長度前綴是兩個字節(jié)。
好了,貌似懂了一點。但具體他說的長度大于255時使用2個字節(jié)長度前綴,小學(xué)減法題:65535 - 2 = 65533啊。不知道這些大牛如何計算的,暫且保留疑問吧?
注:我測試了一下使用UTF8編碼,varchar的最大長度為21854字節(jié)。
在mysql 5.0.45版本,數(shù)據(jù)庫編碼utf8下進行測試:varchar最長定義為21785。也就是說不論字母、數(shù)字、漢字,只能放21785個。
1、一般查詢語句:SELECT `lcontent` FROM `caiji_ym_liuyan`
查詢數(shù)據(jù):
2、有些時候需要查詢某個字段的長度為多少時候才顯示數(shù)據(jù):
SQL語句:SELECT `lcontent` FROM `caiji_ym_liuyan` where
length(lcontent)=40
PS:在mysql中一個漢字等于3個字節(jié),所以查詢的時候需要轉(zhuǎn)換一下
特別要注意的就時候?qū)τ谧止?jié)的轉(zhuǎn)換
本文名稱:mysql怎么看長度最大 mysql 最長長度的數(shù)據(jù)
分享URL:http://chinadenli.net/article14/hjoide.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、App設(shè)計、小程序開發(fā)、外貿(mào)建站、關(guān)鍵詞優(yōu)化、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)