mysql utf-8 varchar字符型字段与字节的关系

本文深入解析MySQL中UTF-8编码下VARCHAR类型的长度限制,解释了不同字符(如中文、英文、数字)在长度计算上的差异,并讨论了因字节限制导致的innodb表行定义长度不超过65535的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何理解mysql utf-8的varchar类型的长度?

比如varchar(3),括号里的3代表最多能输入3个值,这里的值包括中文/英文/数字,即是说最多只能输入3个汉字,或者3个英文,或者3个数字,亦或者3个中/英/数的任意组合。

当然了,这并非代表存入3个汉字的值所占字节跟存入3个英文/数字所占字节是一样的,比如

valuechar_lengthlength(所占字节)
哈哈哈39
hhh33
11133

这里延伸一个实际业务中可能会遇到的错误

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 innodb表要求一个行的定义长度不能超过65535,这里的65535指的是字节,假设你的表中所有字段都是varchar类型,那你是不可能建出11个varchar(2000)的字段来的,因为

11*2000*3=66000 > 65535
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值