mysql text多少字节_mysql 数据库中varchar的长度与字节,字符串的关系

CREATE TABLE `test` (

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

`content` varchar(5) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

INSERT INTO `test`(`content`) VALUES ('123456');

INSERT INTO `test`(`content`) VALUES ('中国人民银行');

SELECT * FROM `test`;

返回:

id content

1 12345

2 中国人民银

可见,varchar(5)能存储5个字符,不管是数字,字母,还是汉字.

CREATE TABLE `test2` (

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

`content` varchar(21842) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

该表中varchar类型的字段能容纳的最大字符数21842是怎么得来的?

21842 = (65535-1-2-4)/3

MySQL要求一个行的定义长度不能超过65535(包括多个字段),所以有65535.

varchar的最大有效长度取决于最大行大小.

减1的原因是实际行的存储从第2个字节开始.

减2的原因是varchar头部的2个字节表示长度.

减4的原因是字段id的int类型占用4个字节.

除以3的原因是一个utf8字符占用3个字节.

如果你在test2表里把varchar(21842)改为varchar(21844),那么就会报以下错误:

1118 - 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中char,varchar与text类型的选用:

知道固定长度的用char,比如MD5串固定是32位.

经常变化的字段用varchar.

超过255字符的只能用varchar或者text,不能用char.

能用varchar的地方不用text.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值