mysql varchar按字节_Mysql varchar 长度是字节还是字符

关于varchar的长度是字节还是字符本人查阅很多文档发现他们写的都是字节长度,但是经过实践表明那个长度指的是能放下的字符串的个数

varchar(255) 表示最多可以放255个字符,不论是中文还是英文。

注:version 4版本之前是按字节

下面再来扩展一点知识:

在5.0以上的MySQL版本中varchar的最长的长度是65535字节,其最大长度受限于最大行长度(max row size 65535Bytes)。65535并不是一个很精确的上限,65535个字节是包括了所有字段的长度、变长字段的长度标识(每个变长字段使额外使用1个或者2个字节记录数据的实际长度)、NULL标志位的长度。下面来看下计算规则:

减去其他字段的长度,具体的计算方法要结合字段的类型来看

减去变长字段的长度标识,如果长度小于256使用1个字节存储,其他的使用2个字节存储。

减去NULL标识位,比如一张表中存在N个varchar字段,那么需要(N+7)/8 (取整) 个字节存储所有的NULL标志位。

下面来证明下(笔者测试的版本是MySQL8.0,字符集选用的是utf8):

mysql > show create table user2;

| user2 | CREATE TABLE `user2` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(21811) NOT NULL DEFAULT '',

`pwd` char(32) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户表' |

其中username这个字段的长度21811是能设置的最大长度,如果再大就会报错,(65535-4-2-32 * 3) / 3 = 21811 个字符。

a. 其中 id int 型占用4个字节,

b. username 字段长度标识2个字节,由于是NOT NULL 所以没有NULL标识位。

c. pwd 字段占用32*3个字节,由于是NOT NULL 也不占用NULL标识位。

不过需要注意的是:不同的字符集每个字符使用的字节数是不一样的。另外,如果插入数据的时候数据的长度大于定义的长度默认是会报错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值