2 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
MySQL 數(shù)據(jù)庫的varchar類型在4.1以下的版本中的最大長度限制為255,其數(shù)據(jù)范圍可以是0~255或1~255(根據(jù)不同版本數(shù)據(jù)庫來定)。在 MySQL5.0以上的版本中,varchar數(shù)據(jù)類型的長度支持到了65535,也就是說可以存放65532個字節(jié)的數(shù)據(jù),起始位和結(jié)束位占去了3個字 節(jié),也就是說,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的數(shù)據(jù)可以使用可變長的varchar來存放,這樣就能有效的減少數(shù)據(jù)庫文件的大小。
VARCHAR值保存時只保存需要的字符數(shù),另加一個字節(jié)來記錄長度(如果列聲明的長度超過255,則使用兩個字節(jié))。VARCHAR值保存時不進行填充。當(dāng)值保存和檢索時尾部的空格仍保留,符合標(biāo)準(zhǔn)SQL。VARCHAR類型的實際長度是它的值的實際長度+1
VARCHAR是變長類型,對于其存儲需求取決于列值的實際長度(在前面的表格中用L表示),而不是取決于類型的最大可能尺寸。例如,一個VARCHAR(10)列能保存最大長度為10個字符的一個字符串,實際的存儲需要是字符串的長度 ,加上1個字節(jié)以記錄字符串的長度。對于字符串'abcd',L是4而存儲要求是5個字節(jié)。
Mysql5根據(jù)編碼不同,存儲大小也不同,具體有以下規(guī)則:
編碼長度限制
字符類型若為gbk,每個字符最多占2個字節(jié),最大長度不能超過32766;
字符類型若為utf8,每個字符最多占3個字節(jié),最大長度不能超過21845。
若定義的時候超過上述限制,則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。
總之,mysql的vachar字段的類型雖然最大長度是65535,但是并不是能存這么多數(shù)據(jù),最大可以到65533(不允許非空字段的時候),當(dāng)允許非空字段的時候只能到65532。
- 2 回答
- 0 關(guān)注
- 10383 瀏覽
添加回答
舉報