日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

varchar(100)

發布時間:2024/6/21 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 varchar(100) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先說結論,mysql 中的 varchar 是有最大長度限制的,這個值是 65535 個字節。

varchar(100),這個 100 的單位是啥,這個單位其實在不同版本中是不一樣的。

在早期低版本中代表的是字節,具體哪個版本我也沒去驗證了,后來被改成了字符,不過可以肯定的是在 5.1 版本后, varchar(100) 就是指 100 個字符。

說到 varchar ,一般都會拿 char 來做比較說明。

char 是固定長度,其單位也是字符,比如 char(10),就表示不管你給的什么值,都會被 mysql 固定保存成 10 個字符。

如果給的字符長度小于 10,那么在尾部就會自動用空格補齊。

如果大于 10,在嚴格模式(strict sql mode)下就會報錯,在非嚴格模式下就會對內容做自動截取操作。

另外 char 也是有最大長度限制的,最大長度為 255, 即 char 類型最多只能保存 255 個字符,char(256) 這都是錯誤的寫法,可以看下面的例子。

##創建一個表,同時聲明address字段長度為256會報錯,最大為255
mysql> create table test2 ( address char(256) );
ERROR 1074 (42000): Column length too big for column 'address' (max = 255); use BLOB or TEXT instead

下面是 char 和 varchar 對于同一個字符所需要的不同的存儲空間,這里假設使用的是 latin1 單字節字符集。

CHAR(4)

存儲空間大小(字節)

VARCHAR(4)

存儲空間大小(字節)

''

' '

4 bytes

''

1 byte

'ab'

'ab '

4 bytes

'ab'

3 bytes

'abcd'

'abcd'

4 bytes

'abcd'

5 bytes

'abcdef'

'abcd'

4 bytes

'abcd'

5 bytes

細心的你可能會發現 varchar 的存儲空間會比字符的實際長度多 1 個字節,這是因為 varchar 需要額外增加 1 到 2 個字節來存儲字符的長度,這個值被稱作前綴。

也就是說在 varchar 類型中,除了字符本身實際占用的空間外,還需要 1 個或 2 個字節來聲明這個字符的長度。

如果存儲的值小于 255 個字節,則使用 1 個字節來存儲前綴,如果大于 255 個字節則使用 2 個字節來存儲前綴。

關于字符集和字節的關系,以及字節 (byte) 與位 (bit) 的關系。

1 byte (字節) = 8 bit (位)

2^8 = 256

所以計算機里常見的 255、256 臨界值絕大多數與這個有關

1 個字節具體占多大的空間,這與所使用的字符集有關系

比如 latin1 單字節字符集,1 個字符即占 1 個字節

我們常見的 GBK、UTF8、UTF8-MB4 這些都是多字節字符集
GBK :一個字符最多占 2 個字節
UTF8:一個字符最多占 3 個字節
UTF8MB4:一個字符最多占 4 個字節

好了,再堅持一會,回到文章開頭的問題,為啥 varchar 最大長度是 65535 個字節呢,其實這個是受 mysql 另一個規則限制導致的,mysql 規定了每行數據大小不能超過 65535 個字節。

另外還有一個小問題,一個字段如果允許為 null ,在 mysql 中也是需要增加額外空間來單獨標識的,反之則不需要這個額外空間,至于這個空間大小具體是怎么計算的,我目前也還沒有研究過。

結合上面說的幾點,下面來通過幾個實例來驗證下。

##字符集設置為latin1,1個字符=1個字節,字段允許為null
mysql> create table test ( address varchar(65536) default null ) charset=latin1;
ERROR 1074 (42000): Column length too big for column 'address' (max = 65535); use BLOB or TEXT instead

‍


##減去varchar前綴長度標識2個字節,還是報錯,說明null標識也占用了空間
mysql> create table test ( address varchar(65533) default null ) charset=latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

##把字段設置為非空即可建表成功
mysql> create table test ( address varchar(65533) not null ) charset=latin1;
Query OK, 0 rows affected (0.01 sec)

##如果字符集設置為UTF8,那么 max=65535/3=21845,一個字符最多占3個字節
mysql> create table test2 ( address varchar(65533) not null ) charset=UTF8;
ERROR 1074 (42000): Column length too big for column 'address' (max = 21845); use BLOB or TEXT instead

基于上面幾個實例,基本上可以得出計算 varchar 最大長度限制的公式。

varchar 最大長度限制 = (行最大字節數(65535) - null 標識字節數 - 長度前綴字節數(1或2)) / 字符集單字符占用最多字節數

看到這里,不知道你有沒有一個疑問,為什么長度前綴 1 或 2 個字節就夠用了呢,因為 2 個字節的話,2^16 = 65536,這已經超過 mysql 行最大字節數 65535 的限制了,所以 1 到 2 個字節就夠用了。

最后再看一個綜合例子,我們創建一個表,采用 UTF8 字符集,添加兩個非空字段,分別為 char 和 varchar 類型,char 類型長度給定為 255。

那么 varchar 類型字段的最大字節數應該就是,

65535 (行最大字節數) - 255*3 (一個字符最多占 3 個字節) = 64770,


然后再減去 2 個長度前綴字節,


64770 - 2 = 64768,


最后再算出 varchar 最大字符數為 64768 / 3 = 21589.33,


##字符數21590超過最大字符數會報錯
mysql> create table test4 (name char(255) not null, address varchar(21590) not null ) charset=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

##字符數21589則剛好能創建成功
mysql> create table test4 (name char(255) not null, address varchar(21589) not null ) charset=utf8;
Query OK, 0 rows affected, 1 warning (0.02 sec)

好了,關于 varchar 的最大長度問題就聊到這了,文中如有錯誤,歡迎大家批評指出,更歡迎大家交流討論,如果文章對你有幫助,點個在看表示對我的支持哈,感謝。

一、首先創建表。

CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`a` char(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

二、插入數據。分別插入了250個漢字‘頂’,250個漢字‘頂’和‘12345’,255個漢字‘頂’。字符集是utf8,那么每個漢字占用3字節,每個數字或英文字符占用1字節。但是不能插入超出255個字符,否則報錯

INSERT INTO t1 VALUES (1,'頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂');

INSERT INTO t1 VALUES (2,'頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂12345');

INSERT INTO t1 VALUES (3,'頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂');

三、查詢字符數和字節數。

select char_length(a),length(a) from t1;

四、定義表t2,定義char(10)。如果插入數據超過10個字符,那么同樣會報錯,而不是截取10個字符。

五、

總結

以上是生活随笔為你收集整理的varchar(100)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕免费高 | 性生交大片免费看3p | 中文字幕日产 | 成人午夜一区二区 | 办公室大战高跟丝袜秘书经理ol | 国产吞精囗交免费视频 | 亚洲色图 校园春色 | 国产婷婷在线观看 | 日本高清网色 | 亚洲成人av片 | 国产99在线视频 | 欧美色图在线播放 | 天天草天天射 | 黄a毛片 | 人人色视频 | 一区二区三区四区五区av | 一本到在线 | 黄色激情毛片 | 欧美精品99久久 | 一级做a爰片久久毛片潮喷 天天透天天干 | 欧美精品免费一区二区三区 | 老女人丨91丨九色 | 亚州中文 | 中文字幕第35页 | 亚洲一区二区三区高清 | 国产在线一区二区 | 色干干| 一区二区日本视频 | 亚洲精品高清视频 | 欧美日韩人妻精品一区二区三区 | 国产精品swag | 日本久草视频 | 成人在线超碰 | 青春草在线视频观看 | 久久久久久久久99 | 国产日韩久久久 | 久久久97| 蜜桃做爰免费网站 | 国产成人久久精品 | 久久av高潮av无码av喷吹 | 成年人香蕉视频 | 香蕉视频亚洲一级 | 久久久社区 | 日韩美女福利视频 | jizz一区二区三区 | 国产精品无码天天爽视频 | 亚洲午夜精品一区 | 免费成人av在线播放 | 欧美三极片| 伊人av网| 丁香花高清在线观看完整动漫 | 正在播放木下凛凛xv99 | aaaaa级少妇高潮大片免费看 | 成人免费一级片 | 欧美10p| 成人一区二区免费视频 | 丰满少妇熟乱xxxxx视频 | 国产毛片一区二区三区va在线 | 成人在线精品 | 国产激情精品一区二区三区 | 姑娘第5集在线观看免费 | 无码人妻一区二区三区在线 | xxxx999| 香港三日本三级少妇66 | 香蕉伊思人视频 | 欧洲一区在线观看 | 7777久久亚洲中文字幕 | av手机在线看 | 亚洲图片欧美在线 | 婷婷综合av| 国产欧美一区二区在线观看 | 免费黄色的网站 | 朝桐光在线观看 | 久久人妻少妇嫩草av无码专区 | 日本激情网站 | 久久久久久国产精品无码 | 污污免费观看 | 精品日韩一区 | 国产成人免费电影 | 欧美激情一区二区三区免费观看 | 日本成人综合 | xxxx69视频 | 国产在线视频福利 | 69天堂| 一本色道久久综合亚洲精品按摩 | 日本激情一区二区 | sm调教羞耻姿势图片 | 一级片视频免费 | 一级免费a| 成人tv| 99福利影院 | 日韩av在线导航 | 已婚少妇美妙人妻系列 | 欧美在线小视频 | wwwwxxxx国产| 亚洲色图另类 | 欧美日韩一区二区视频观看 | 日韩欧美一区二区三区四区 | 91精品国产91久久久久久吃药 |