当前位置: 首页 > news >正文

mysql比较varchar值大小_Mysql varchar大小长度问题

1、限制规则

字段的限制在字段定义的时候有以下规则:

a)  存储限制

varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。

b) 编码长度限制

字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。

若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

c)  行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

2、计算例子

举两个例说明一下实际长度的计算。

a)  若一个表只有一个varchar类型,如定义为

create table t4(c varchar(N)) charset=gbk;

则此处N的最大值为(65535-1-2)/2= 32766。

减1的原因是实际行存储从第二个字节开始’;

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

除2的原因是字符编码是gbk。

b)  若一个表定义为

create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

则此处N的最大值为 (65535-1-2-4-30*3)/3=21812

减1和减2与上例相同;

减4的原因是int类型的c占4个字节;

减30*3的原因是char(30)占用90个字节,编码是utf8。

如果被 varchar 超过上述的 b 规则,被强转成 text 类型,则每个字段占用定义长度为 11 字节,当然这已经不是“ varchar ”了

相关文章:

  • 阿里云RDS MySQL 数据如何快速同步到 ClickHouse
  • 【解决】maven管理工具使用package打包的时候无法将lib文件夹下的第三方jar包打入,上线打jar包后运行异常问题...
  • layui日历插件
  • 回溯算法第三篇(批处理作业调度、N皇后【基于排列树实现】、符号三角形问题)
  • 实战章节:在Linux上部署各类软件
  • SpringBoot的Starter自动化配置,自己编写配置maven依赖且使用及短信发送案例
  • XUbuntu22.04之8款免费UML工具(一百九十七)
  • 大一C语言作业 12.14
  • 智能优化算法应用:基于旗鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • easypoi 导出excel设置标题样式
  • Altair Radioss碰撞 安全与冲击 衡祖仿真
  • 鸿蒙应用开发(二)环境搭建
  • Java程序员,你掌握了多线程吗?
  • 第五节JavaScript typeof、类型转换与正则表达式
  • 解决POI导入内部错误方式
  • 实验01:静态路由配置实验
  • 最前端|Locofy试用报告:设计稿直接转换为代码
  • CanEasy多场景应用,让汽车总线测试更简单
  • JS对象笔记
  • Java八股文面试全套真题【含答案】- Redis篇
  • 习近平同俄罗斯总统普京举行会谈
  • 42岁退役军人高武生命最后时刻:在水中托举近20分钟救出落水孩童
  • 习近平致电祝贺默茨当选德国联邦总理
  • 上海黄浦区拟73.2654亿元协议出让余庆里7宗组合地块
  • 国产基因测序仪龙头华大智造业绩持续承压,今年有望迎来拐点?
  • 菲律宾首都机场航站楼外发生汽车冲撞事故致2死多伤