mysql varchar java_关于MySQL varchar类型最大值,原来一直都理解错了

写在前面

关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~

背景描述

最近同事在做技术方案设计时候,考虑到一个表设计时希望利用varchar类型进行存储,而不是采用text,那就需要确定下varchar允许的最大长度是多少,用来评估下后期是否会遇到存储长度瓶颈。

那问题来了:MySQL 数据库的varchar字段类型最大存储长度到底是多少?

问题分析

一切以官方文档为准,翻了下官方描述如下:

In MySQL 4.1 the length is always 1 byte. In MySQL 5.0 the length may be either 1 byte (for up to 255) or 2 bytes (for 256 to 65535).

大概意思就是说:

在MySQL 4.1以前,长度总是1个字节(varchar(20),指的是20字节)

在MySQL 5.0以后,长度可以是1字节(最多255个字节)或2个字节(256到65535)

按照官网说法最大值是65535bytes,utf8mb4编码情况下每个字符占4个bytes,最大值应该为16383.75

65535/4=16383.75

实践验证

到此貌似已经有了结论了,但实际情况真的是这样的么?

我们来实验下试试看?

mysql 版本:select version(); // 5.7

1、若一个表只有一个varchar类型

定义如下:

CREATETABLE`t1` (`c`varchar(N) DEFAULTNULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

那表 t1 的`c`字段的最大长度N为多少呢?

(65535−1−2)/4=16383

备注:

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

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

· 除4的原因是字符编码是utf8mb4。

2)若表中包含其他多种类型的情况呢

定义如下:

CREATETABLE`t2` (`c1`int(10) DEFAULTNULL,`c2`char(32) DEFAULTNULL,`c3`varchar(N) DEFAULTNULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

那表 t2 的`c`字段的最大长度N为多少呢?

(65535−1−2−4−32*4)/4=16350

备注:

· 减1、减2的原因同上;

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

· 减32*4的原因是utf8mb4编码的char类型占用4个字节(长度32)

我们来验证一下是否如上述推断计算所述:

1)修改t2表c3字段长度为16350

alter table `t2` modify column `c3` varchar(16350)

执行成功。

2)修改t2表c3字段长度为16351

alter table `t2` modify column `c3` varchar(16351);

执行失败,报错信息如下:

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.

总结一下

Q:varchar到底能存多少个字符?

A:这与表使用的字符集相关,latin1、gbk、utf8、utf8mb4编码存放一个字符分别需要占1、2、3、4个字节,同时还要考虑到去除其他字段的占用影响。

实践出真知,可以简单试一下之后再下结论。

往期热文推荐:

0dd228528a293e15d875d329ada3e22c.png

「技术架构精进」专注架构研究,技术分享

Thanks for reading!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 1027C】Minimum Value Rectangle (数学,公式化简,思维,卡常卡memset)

题干: You have nn sticks of the given lengths. Your task is to choose exactly four of them in such a way that they can form a rectangle. No sticks can be cut to pieces, each side of the rectangle must be formed by a single stick. No stick can …

mysql数据库业务逻辑_Mysql业务设计(逻辑设计)

逻辑设计数据库设计三大范式数据库设计第一大范式数据库表中所有的字段都只具有单一属性单一属性的列是由基本数据类型所构成设计出来的表都是简单的二维表数据库设计的第二大范式要求表中只有一个业务主键,也就是说符合第二范式的表不能存在非主键列,只…

lua进入压缩包_使用lua语言制作贪吃蛇游戏(love2d)(一)开发环境的搭建

本教程教大家使用lua制作一个贪吃蛇,游戏引擎使用love2d,因为它开源轻巧而且跨平台。1.开发环境搭建:windows系统:在windows系统下,首先我们进入官网www.love2d.org。love2d官网进入官网可以看到Download选项&#xff…

mysql rand() 子查询_MySQL ------ 子查询(十三)

查询(query):任何SQL 都是查询,但此术语一般指select 语句子查询(subquery):嵌套在查询中的查询,MySQL4.1 引入对子查询的支持。接下来得就比较有意思了,需要你对于表与表之间的关系有所了解&am…

centos 6.5 apache mysql php_CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境

简单点的:1.关闭SELINUX:setenfo 0 暂时关闭2.安装Apache:yum install httpd3.安装MySQL:yum install mysql mysql-server4.安装PHP:yum install php5.相关的配置:PHP关联MySQL;httpd出错信息…

mysql 如何调用函数结果_MySQL自定义函数调用不出结果

自定义函数的代码:DROP FUNCTION IF EXISTS fn_HrStaffBase_GetNameFromidCarddelimiter //CREATE FUNCTION fn_HrStaffBase_GetNameFromidCard (a VARCHAR(30))RETURNS VARCHAR(50)beginreturn (SELECT staff_name FROM hr_staff_base where idCard a);END //--…

【CodeForces - 987C 】Three displays (dp,最长上升子序列类问题,三元组问题)

题干: It is the middle of 2018 and Maria Stepanovna, who lives outside Krasnokamensk (a town in Zabaikalsky region), wants to rent three displays to highlight an important problem. There are nn displays placed along a road, and the ii-th of th…

git object 很大_这才是真正的Git——Git内部原理

本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的、更改一个文件时,Git内部是怎么变化的、Git这样实现的好处等等。TL;DR本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码…

【CodeForces - 195D】Analyzing Polyline (思维,卡精度的处理方式)

题干: As Valeric and Valerko were watching one of the last Euro Championship games in a sports bar, they broke a mug. Of course, the guys paid for it but the barman said that he will let them watch football in his bar only if they help his son …

【CodeForces - 985D】Sand Fortress (二分,贪心,思维构造,技巧,有坑)

题干: You are going to the beach with the idea to build the greatest sand castle ever in your head! The beach is not as three-dimensional as you could have imagined, it can be decribed as a line of spots to pile up sand pillars. Spots are numbe…

scrapy 分布式 mysql_Scrapy基于scrapy_redis实现分布式爬虫部署的示例

准备工作1.安装scrapy_redis包,打开cmd工具,执行命令pip install scrapy_redis2.准备好一个没有BUG,没有报错的爬虫项目3.准备好redis主服务器还有跟程序相关的mysql数据库前提mysql数据库要打开允许远程连接,因为mysql安装后root用户默认只允许本地连接,详情请看此文章部署过程…

(精)DEVC++的几个实用小技巧

依赖 DEV C 5.11 最新版 下载安装DEV C后,使用DEV C打开一个随便的cpp文件,你看到的应该是这样的界面。(为了节约读者的流量,图片进行了有损压缩,但是字看得清楚) 重点是确认工具栏有AStyle选项。 相信…

win10一按右键就闪屏_升级Win10正式版后屏幕一直闪烁正确的解决办法

Win10正式版屏幕一直闪烁怎么办呢?升级到Win10正式版并进入Windows桌面后,发现屏幕一直不断的闪烁,此时无法执行任务操作。小编最近在升级到Win10正式版后才遇到了这个问题,后台经过反复思考和探索,终于解决了问题&…

*【CodeForces - 195B】After Training (多解,模拟)

题干: After a team finished their training session on Euro football championship, Valeric was commissioned to gather the balls and sort them into baskets. Overall the stadium has n balls and m baskets. The baskets are positioned in a row from l…

pandas打印全部列_python——pandas练习题1-5

练习1-开始了解你的数据探索Chipotle快餐数据相应数据集:chipotle.tsvimport pandas as pd chipopd.read_csv("exercise_data/chipotle.tsv",sept) chipo.head(5)chipo.shape[0] #查看有多少行4622chipo.shape[1] #查看有多少列5chipo.columns #打印所…

【CodeForces - 689B】Mike and Shortcuts(Dijkstra最短路,或者bfs跑状态类似spfa)

题干: Recently, Mike was very busy with studying for exams and contests. Now he is going to chill a bit by doing some sight seeing in the city. City consists of n intersections numbered from 1 to n. Mike starts walking from his house located a…

java utf-8 gbk_Java 字符转码之UTF-8转为GBK/GB2312

java跟python类似的做法,在java中字符串的编码是java修改过的一种Unicode编码,所以看到java中的字符串,心理要默念这个东西是java修改过的一种Unicode编码的编码。packagestring;importjava.nio.charset.Charset;public classUTF82GBK {publi…

java好的博客_推荐5个万博爆款Java开源博客,是我目前用过最好用的博客系统

1.OneBlog一个简洁美观、功能强大并且自适应的Java博客,使用springboot开发,前端使用Bootstrap,支持移动端自适应,配有完备的前台和后台管理功能。功能简介多种编辑器、自动申请友情链接、百度推送、评论系统、权限管理、SEO、实时…

中介者模式java_图解Java设计模式之中介者模式

智能家庭项目1)智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘等2)主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为 :闹铃响起 - 》咖啡机开始做咖啡 -》窗帘自动落下 -》电视机开始播放…

【POJ - 2398】Toy Storage (计算几何,二分找位置,叉积,点和直线的位置关系)

题干: Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box to put his toys in. Unfortunately, Reza is rebellious and obeys his parents by simply throwing …