一、MySQL 限制回顾 之前在《MySQL Text 字段的限制》一文中讲过了关于 MySQL 在 Server 层和 InnoDB 层的限制,但是限制的算法没有详细展开,这里进行补充说明,先回顾一下...MySQL 的两个限制: 1....MySQL Server 层 的限制为单条记录的大小不超过 65535 字节; 2...., 这个是用户存储字段长度的变量 这个只是默认初始值,后面会根据长度进行溢出页的设置 */ field_max_size = dict_col_get_max_size...: 如果变长字段的最大值大于40 (溢出页指针的2倍),则这个字段在页内 只保留40个字节,且长度变量设置为1,即总共占用41个字节。
参考: http://dinglin.iteye.com/blog/1681332 单列索引的长度的限制 (5.6里面默认不能超过767bytes,5.7不超过3072bytes): 起因是...255×4>767, 于是增加了一个参数叫做 innodb_large_prefix # 256的由来: 只是因为char最大是255,所以以前的程序员以为一个长度为255的index就够用了,...--- by 阿里-丁奇 在MySQL5.6里默认 innodb_large_prefix=0 限制单列索引长度不能超过767bytes 官网文档:https://dev.mysql.com/doc...在MySQL5.7里默认 innodb_large_prefix=1 解除了767bytes长度限制,但是单列索引长度最大还是不能超过3072bytes 联合索引的长度的限制 (不能超过3072bytes...又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,primay-key和某个二级索引都达到这个限制)。
该表有 242 个字段,都是 varchar 类型,只是长度上有所区别。 二、MySQL 的限制 说明:本文仅讨论 MySQL 中,单条记录最大长度的限制,其他的暂且搁置。...说完这个概念,下面我们再说一下这个最大长度的限制。...) 2.1 MySQL Server 的长度限制 The internal representation of a MySQL table has a maximum row size limit of...2.2 InnoDB 的长度限制 InnoDB 作为现在官方唯一还在继续开发和支持的存储引擎(下一个版本 MySQL 8.0 中就默认看不到原先的 MyISAM 了),其长度限制比较严格,其大致的算法如下...2.3 字段个数的限制 同样,除了长度,对每个表有多少个列的个数也是有限制的,这里简单说一下: 1. MySQL Server 层规定一个表的字段个数最大为 4096; 2.
前两天同事提了一个问题,MySQL 5.7 中给某张表字段增加一个单键值索引,提示了如下错误, 一些背景信息: 表设置的字符集,utf8mb4 。 表的存储引擎,MyISAM 。...我们知道,MySQL 和 Oracle 在索引上最大的一个区别,就是索引存在长度的限制。如果是超长键值,可以支持创建前缀的索引,顾名思义,取这个字段的前多少个字符/字节作为索引的键值。...MySQL 官方手册索引的章节提到了,前缀索引长度限制是和引擎相关的,如果用的是 InnoDB ,前缀上限是 767 字节,当启用 innodb_large_prefix 时,上限可以达到 3072 字节...我们可以测下 MyISAM ,utf8mb4 编码表 test1 ,250长度的字段 c1 ,251长度的字段c2 , CREATE TABLE test1 (c1 varchar(250), c2...c1 ,334 长度的字段 c2 , CREATE TABLE test2 (c1 varchar(333), c2 varchar(334)) ENGINE=MyISAM DEFAULT CHARSET
前言 有5个库,每个库里面的表结构一样,现在需要修改某个字段的长度,操作的时候记得要选择非业务时间段,当然也可以直接使用存储过程来搞。...WHERE TABLE_SCHEMA='scrm_wechat_1' AND COLUMN_NAME IN ('resource_url') 执行SQL 直接执行或者通过SQL脚本都可以,我直接执行的
mysql 在DDL 权威指南 5.6 官方文档 :verision :https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.html...在5.6 里面执行DDL 根本没有单独操作Varchar这个字段类型。...对于VARCHAR大小为0到255个字节的列,需要一个长度的字节来编码该值。对于VARCHAR 大小为256字节或更大的列,需要两个长度的字节。...注意 一个的字节长度VARCHAR列是依赖于字符集的字节长度 。 减少VARCHAR使用就地尺寸ALTER TABLE不被支持。减小VARCHAR 大小需要表副本(ALGORITHM=COPY)。...总结 在数据量很大的时候,varchar通过Online DDL做到快速进行更改字段长度。但是前提条件就是不会进行锁表和copy数据的过程。 这个前提条件就是数据库的支持5.7及5.7以上。
最近在工作中,碰到了个很诡异的问题,需求是在两个MySQL数据库为同一张表增加一个二级索引(单键值字段(x varchar(500))),表结构和加索引的语法,都是相同的,但是一个库执行成功了,一个执行失败了...MySQL中还会对索引键的长度有限制?.../en/create-index.html 前缀的长度限制,是和存储引擎相关的。...缩小字段长度,例如x varchar(500),改为x varchar(255)。 2. 创建索引的时候,指定前缀长度,alter table ... add index ......,换算成utf8,或者utf8mb4,至少是255或者191个字符的长度,一个单键值索引,如果达到这长度,就得考虑下索引字段的选择是否合理了,当然如果是几个字段组成的复合索引,达到这个长度,合理不合理,
在mysql中的group_concat函数默认支持的最大字符数为1024。 当你使用group_concat函数时,超出第1024字符的字符会全部丢失。 今天就被这个问题搞了一两个小时。...获得group_concat的最大长度 SELECT @@global.group_concat_max_len; 或者 show variables like "group_concat_max_len..."; 一看自己的mysql中group_concat的最大限制 发现等于1024 解决方法: 1.使用sql设置group_concat的最大长度 SET GLOBAL group_concat_max_len...=102400; SET SESSION group_concat_max_len=102400; 但是这种方式在重启mysql后就无效。...2.在MySQL配置文件中my.conf或my.ini中添加: #[mysqld] group_concat_max_len=102400 然后重启mysql服务
最近,在工作中遇到了MySQL中如何存储长度较长的字段类型问题,于是花了一周多的时间抽空学习了一下,并且记录下来。...MySQL大致的逻辑存储结构在这篇文章中有介绍,做为基本概念:InnoDB 逻辑存储结构 注:文中所指的大数据指的是长度较长的数据字段,包括varchar/varbinay/text/blob。...此处的值为64764,加上前缀768正好是65532。(注意一点,虽然表示BLOB长度的是8字节,实际只有4个字节能使用,所有对于BLOB字段,存储数据的最大长度为4GB。)...将列放入外部存储页的标准 当一行中的数据不能在数据页中放下,需要申请外部存储页时,MySQL需要决定将哪一列的数据放到外部存储页,遵循的规则如下: 长度固定的字段不会被放到外部存储页(int、char(...N)等) 长度小于20字节的字段不会被放到外部存储页。
在MySQL的表结构设计中,突然想起来几个地方碰到的问题比较多,大体来说一个就是字符集,一个就是数据类型。 而字符集和数据类型结合起来,就有一个蛮有意思的细节,那就是行长度的问题。...比如我们创建一个表使用了varchar的类型,如果指定为gbk,表里含有一个字段,可以指定为32766字节,如果再长一些就不行了。...其中的计算方式就需要理解了,因为varhcar类型长度大于255,所以需要2个字节存储值的长度,而MySQL里面的页的单位是16k,使用了IOT的方式来存储。...如果是gbk字符集,含有下面的几个字段,则memo字段的varchar类型最大长度是多少?...否则前期不够重视,在后面去做扩展的时候就会有很大的限制。
以前没注意过这些比对算法对长度的要求,此文记录一下。...MUSCLE再linux上的使用之前介绍过: Linux下运行MUSCLE MUSCLE对序列长度没有明确的限制,但是使用32位软件的时候,能够出结果的最大长度约为10,000。...在MUSCLE官网还有文章讨论了多条序列的比对是否有意义。作者认为对于多序列比对,几乎不可能得到一个良好的比对结果。多重比对隐含的假定为唯一重要的突变是置换、短随机序列的插入和删除。...这对于少数密切相关的序列来说是一种合理的简化,但是随着序列散度或序列数量的增加,这种简化越来越不准确。...作者提出一种减少数据集的方法,即先用UCLUST 95%或90%进行聚类,得到较少的保守区序列,再进行比对。 MAFFT最多可比对∼20,000 sequences × ∼30,000 sites。
1、今天发生了一件有意思的事情,传输的数据大于标准定的字段长度了,我把字段长度调大了,把数据传输过来了。...答:剧透一下,其实使用char_length()查询出来的,就可以把这些删除掉,然后将调大的字段长度调小就行了。备注,我实际操作的字段都是中文字符哈,别再写教程写出血案了。 ?...2、先了解一下,Mysql中length()、char_length()的区别。 1)、length():mysql里面的length()函数是一个用来获取字符串长度的内置函数。 ...2)、char_length():在mysql内置函数里面查看字符串长度的还有一个函数是char_length()。 ...3、扩展一下,MySQL5.0.3版本之后varchar类型的变化。
不知道大家第一眼看标题的时候有没有理解,什么是“字段类型长度”,这里我来解释下,就比如我们在MySQL建表的时候,比如下面这个建表语句:CREATE TABLE `user` ( `id` int(10...,而每个类型+数字就是该字段的类型长度,比如int(10)就是该字段是int类型长度为10,这下大家应该能理解什么是MySQL表字段类型长度了吧(其实在后续的讲解中会发现这个并不是长度,而是宽度)那么重点问题来了...,每一种类型后面括号里的数字都有什么含义呢,下面我们来剖析下:首先MySQL表的字段都支持哪些类型?...:VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N,MySQL一个表中所有的VARCHAR字段最大长度是65535个字节...;对某些值的宽度短于该列宽度的值进行左填补显示的,而不是为了限制在该列中存储值的宽度,也不是为了限制那些超过该列指定宽度的值的可被显示的数字位数,因此我们得出一下结论:对于数值类型,可以不指定宽度,使用默认长度即可
快放假了,水一篇.背景在使用mysql的时候, 可能会遇到需要创建很多列的表的情况, 那么最多能创建多少列呢?...该信息记录该数据行有多少个字段, 正好使用10bit, 也就是1024 和innodb的数据字段数量限制恰好吻合.也就是在存储设计上就已经有了字段数量限制了, 后续的new style format(...比如compact/DYNAMIC)之类的虽然去掉了rec_n_fileds,但为了兼容性,字段数量的限制还是没变....(毕竟正常情况很难达到1017个字段)达到字段数量限制之后会提示: ERROR 1117 (HY000) at line 1: Too many columns 之前解析超多列的时候演示过了的, 这里就不再赘述了....参考:https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.htmlhttps://github.com/mysql/mysql-server/blob
加密算法有哪些 非对称加密算法:RSA,DSA/DSS 对称加密算法:AES,RC4,3DES HASH算法:MD5,SHA1,SHA256 数据加密的长度变化 加密流出 字符串转换成 bytes...-> padding -> base64 编码 将字符串转换成 byte 根据字符串所占长度不同,长度会扩充到不同倍数 ascii 码的字符,如数字字母等,每个字符只占一个字节,长度不扩充 正常情况下...,汉字等 unicode 编码,一个字符占 3 个字节,长度扩充3倍 如果是 mysql 中的 utf8mb4 编码,一个字符最大可以占用4个字节,长度扩充4倍 padding 将bytes 字符填充到...16的整数倍,长度最大增加16 加密 长度增加28(消息校验体16, 随机数12) base64 编码 长度填充到3整数倍, 之后4/3 大致上最大长度为 4/3* n *length + 64 Go
常用的字段数据类型: int:整型 double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99; char:固定长度字符串类型; char(10) 如果不足...时间类型,格式为:hh:mm:ss timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值 datetime:日期时间类型 yyyy-MM-dd hh:mm:ssmysql字段每个类型长度大小与建表的类型长度...我们不能一概而论,因为不同的数据类型对宽度的处理也不一样:1、整数类型,这里显示的宽度和数据类型的取值范围是没有任何关系的,显示宽度只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充...(9),int(11),bigint(20),这些默认的宽度是跟该类型的取值范围长度相关。...……mysql中 varchar 字段长度,是按照字符的长度计算, 即,name 保存有 "我是谁" , 这是三个字符。
Tomcat 默认的post参数的最大大小为2M, 当超过时将会出错,可以配置maxPostSize参数来改变大小。 tomcat 6 及 以下版本 ?...tomcat 6 maxPostSize="0" //0 表示不限制大小 在tomcat文件夹下的conf文件中的server.xml 配置: <Connector port="8080" protocol...tomcat 7 maxPostSize="-1" // -1 表示不限制大小 在tomcat文件夹下的conf文件中的server.xml 配置: PS:在接收端的Tomcat修改此配置。
给textarea增加长度的限制 我们知道文本框可以有一个为maxlength的属性,可以限制文本框的长度,当时备注框textarea却没有,那么 要怎样限制备注框的长度呢?...onKeyDown='if (this.value.length>=20){event.returnValue=false}'>aaaa 我们也可以将判断写在函数中,如果输入的长度超过显示...javascript"> function checkValid() { var a = document.testform.A; if(a.value.length > 20) { alert("输入的备注框长度不能超过
这个就是因为联合所以长度限制的。 我们来看看MySql InnoDB引擎对索引长度的限制: mysql单索引限制: 在默认情况下,InnoDB对单一的字段索引长度限制最大为767个字节。...这个767字符大小的限制就是从这里来的。 联合索引(前缀索引)限制: 同样的,mysql对前缀索引也有同样的限制。根据字符集不同,长度限制也不同。...字符集使用utf8的时候长度限制是:767个 使用uft8mb4的时候长度限制是:3072个 但是,在文章一开始,凯哥就强调了,凯哥数据库使用的字符集是:utf8mb4。...如果没有开启这个,InnoDB会对,无论什么表索引键长度限制都是767了。 解决方案有两种: 1:mysql系统变量innodb_large_prefix开启。...凯哥这里使用了第二种方案 2:修改联合主键中每个字段的长度 联合主键的三个字段如下: `registry_group` varchar(50) NOT NULL, `registry_key` varchar
先说结论,mysql 中的 varchar 是有最大长度限制的,这个值是 65535 个字节。 varchar(100),这个 100 的单位是啥,这个单位其实在不同版本中是不一样的。...另外 char 也是有最大长度限制的,最大长度为 255, 即 char 类型最多只能保存 255 个字符,char(256) 这都是错误的写法,可以看下面的例子。...##创建一个表,同时声明address字段长度为256会报错,最大为255 mysql> create table test2 ( address char(256) ); ERROR 1074 (42000...:一个字符最多占 4 个字节 好了,再坚持一会,回到文章开头的问题,为啥 varchar 最大长度是 65535 个字节呢,其实这个是受 mysql 另一个规则限制导致的,mysql 规定了每行数据大小不能超过...另外还有一个小问题,一个字段如果允许为 null ,在 mysql 中也是需要增加额外空间来单独标识的,反之则不需要这个额外空间,至于这个空间大小具体是怎么计算的,我目前也还没有研究过。