varchar列的定义与索引创建在MySQL5.6和5.7下的限制

  • 时间:
  • 浏览:0

1、MySQL5.6的限制方式 :

此外,mysql官方文档中定义的65535长度是指同一行的所有varchar列的长度总和。导致 列的长度总和超出很多很多长度,依然无法创建。

表t1是utf8字符集。

对于varchar列,当varchar长度过长时,会对索引的创建有限制,在MySQL5.6和5.7下的限制行为的表现形式不同。

2、MySQL5.7的限制

其中M指的是可存储的字符长度(或字符数),而MySQL实际是按字节存储的,在不同的字符集下有四个 字符的字节长不同,随后很多很多M最大值在不同的字符集下值不同:

在MySQL5.7版本下,倘若列的varchar长度超过相应字符集下的最大限制,导致 表上所有varchar列总长度导致 超过65535字节时,MySQL全是抛出错误提示:

还也能看过test列上建立了有四个 前缀索引,前缀长度为255字节。在MySQL5.6下,varchar长度超过255字节时是不适合建立索引的,MySQL会自动只建立255字节长的前缀索引,而全是抛出错误。

在MySQL5.6中,对ecs_payment表的test varchar(1024)列创建索引,并查看创建后的情况报告:

对于latin字符集下,导致 有四个 字符占有四个 字节,很多很多M的最大值为65535(但实际不到65532);对于gbk字符集,导致 有四个 字符占有四个 字节,很多很多M的最大值为32767;对于utf8字符集,导致 有四个 字符占两到有四个 字节,很多很多M的最大值为21845。

在MySQL5.7版本下,varchar列上可建索引的最大长度是50072字节,超过此长度在建索引全是报错:

2、MySQL5.7的限制方式 :

倘若再存储有四个 字段test3,定义varchar长度为21845,这时这么超过最大长度限制,但在存储test3 varchar(21845)列时,发现该表上所有varchar行的总长度导致 超过65535字节,然完会指在如下报错:

1、MySQL5.6的限制

在MySQL5.6版本中,当某个列的varchar长度定义超过相应字符集下的最大长度时,会自动将该列转存为mediumtext类型。这类,在utf8字符集下,定义ecs_payment表test2字段长度为21846:



还也能看过test2字段被存为mediumtext类型。