国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

mysql VARCHAR的最大長(zhǎng)度到底是多少

2024-07-24 12:49:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
以前一直都認(rèn)為有兩個(gè)字節(jié)來(lái)記錄長(zhǎng)度(長(zhǎng)度小也可以用一個(gè)字節(jié)記錄),所以這個(gè)問(wèn)題當(dāng)時(shí)覺(jué)得就挺無(wú)聊的不過(guò)后來(lái)群里有人給了解釋?zhuān)蝗徊虐l(fā)現(xiàn)原來(lái)事情不是這么簡(jiǎn)單

MYSQL COMPACT格式,每條記錄有一個(gè)字節(jié)來(lái)表示NULL字段分布,如果表中有字段允許為空,則最大只能定到65532,如果沒(méi)有字段允許為空,則那個(gè)字節(jié)可以節(jié)省,最大可以定義到65533,不知道是不是這個(gè)原因

于是上網(wǎng)看了些資料,又在本地做了些實(shí)驗(yàn),原來(lái)vachar的最大長(zhǎng)度真的是不定的(根據(jù)是否有非空字段來(lái)決定)
在本地做了下實(shí)驗(yàn),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
對(duì)于第二種情況,允許空字段的時(shí)候是不能加到65533的長(zhǎng)度的,最大只能到65532,到底應(yīng)該是引文的那種說(shuō)法。

網(wǎng)上也有人做了類(lèi)似的實(shí)驗(yàn),參考http://stackoverflow.com/questions/8295131/best-practise-for-sql-varchar-column-length
復(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é)一下,原來(lái)mysql的vachar字段的類(lèi)型雖然最大長(zhǎng)度是65535,但是并不是能存這么多數(shù)據(jù),最大可以到65533(不允許非空字段的時(shí)候),當(dāng)允許非空字段的時(shí)候只能到65532。

以下是其它網(wǎng)友的補(bǔ)充說(shuō)明:

這不是一個(gè)固定的數(shù)字。本文簡(jiǎn)要說(shuō)明一下限制規(guī)則。

strlen 計(jì)算字符串長(zhǎng)度,一個(gè)中文當(dāng)2字符
mb_strlen根據(jù)它的字符編碼模式,統(tǒng)計(jì)字符quot

count計(jì)算數(shù)組中的元素?cái)?shù)目或?qū)ο笾械膶傩詡€(gè)數(shù)

復(fù)制代碼 代碼如下:

<?php
header('Content-Type:text/html;charset=UTF-8');
$string1="謝春業(yè)";//定義中文字符變量
$string2="xcy";//定義英文字符變量
//直接輸出看看他們的長(zhǎng)度
echo strlen($string1);
echo "</br>";
echo strlen($string2);
echo "</br>";
//用 php 多字節(jié)擴(kuò)展函數(shù) mb_strlen試試看
echo mb_strlen($string1,'utf8');
echo "</br>";
echo mb_strlen($string2,'utf8');
echo "</br>";
?>


輸出結(jié)果是:
9
3
3
3

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。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 读书| 安义县| 黄浦区| 金昌市| SHOW| 彝良县| 会宁县| 徐州市| 卓资县| 杂多县| 社旗县| 凤翔县| 图们市| 洞口县| 营山县| 江华| 天气| 普安县| 新和县| 凉城县| 营山县| 阜新市| 资溪县| 苏尼特左旗| 东光县| 浦县| 高清| 富宁县| 雷州市| 桓台县| 闸北区| 普安县| 余江县| 井陉县| 嘉鱼县| 石棉县| 四川省| 依兰县| 抚宁县| 岳普湖县| 东港市|