知识笔记(五十四)———mysql比较varchar值大小_Mysql varchar大小长度问题

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 知识笔记(五十四)———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 ”了。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 存储 关系型数据库
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
|
2月前
|
SQL 存储 关系型数据库
运维笔记.MySQL.基于mysqldump数据备份与恢复
运维笔记.MySQL.基于mysqldump数据备份与恢复
42 0
|
2月前
|
SQL 关系型数据库 MySQL
【go笔记】使用sqlx操作MySQL
【go笔记】使用sqlx操作MySQL
|
4月前
|
存储 关系型数据库 MySQL
Mysql优化之索引相关介绍(笔记)
索引查找从顶层节点开始查找,通过key值,也就是主键的值进行比较,最终定位到存储数据的叶子节点上面,从叶子节点取出响应的数据。
54 0
Mysql优化之索引相关介绍(笔记)
|
4月前
|
存储 关系型数据库 MySQL
技术笔记:MySQL数据库优化详解(收藏)
技术笔记:MySQL数据库优化详解(收藏)
53 0
|
4月前
|
SQL 关系型数据库 MySQL
技术笔记:python连接mysql数据库
技术笔记:python连接mysql数据库
45 0
|
4月前
|
SQL 存储 关系型数据库
技术笔记:MYSQL常用基本SQL语句总结
技术笔记:MYSQL常用基本SQL语句总结
33 0
|
4月前
|
SQL 关系型数据库 MySQL
Mysql优化之索引相关介绍(笔记)
这段内容涵盖了创建MySQL用户表的SQL语句,创建一个包含`username`、`age`和`dept`字段的联合索引,以及关于联合索引查询时遵循的最左前缀原则的解释。
40 0
|
4月前
|
存储 关系型数据库 MySQL
Mysql优化之索引相关介绍(笔记)
MySQL的InnoDB存储引擎中,索引节点默认大小为16KB(16384字节)。查询每个节点大小可执行`SHOW GLOBAL STATUS LIKE 'Innodb_page_size';`。索引节点大小影响B+树的效率,更高的层数意味着更多的I/O操作。当数据量超过2000万条时,建议分表以减少查询延迟和I/O次数。B+树高度为3时,根据节点数据结构,可以计算出能存放的数据量。
32 0
|
4月前
|
存储 关系型数据库 MySQL
Mysql优化之索引相关介绍(笔记)
**摘要:** 索引是数据库中用于加速数据检索的排好序的数据结构,例如MySQL常用B+树。没有索引时,查询需全表扫描,而使用索引则减少扫描次数,提高效率。例如,二叉树、红黑树和B树是常见数据结构,但MySQL选择B+树作为默认索引,因为它能避免非叶子节点存储数据,减少磁盘I/O操作,适合大数据量存储,并提供顺序访问的优势。
35 0
下一篇
无影云桌面