美文网首页
Mysql索引过长问题解析

Mysql索引过长问题解析

作者: As_breath | 来源:发表于2020-05-15 22:34 被阅读0次

    近期遇到两次mysql建表时,提示索引过长错误信息的问题。

    根据错误信息提示,检查建表语句,发现对应的索引字段为VARCHAR(256).与提示的767bytes长度相差较大。由此引出Mysql(大多数数据库对varchar类型处理都基本相似)对VARCHAR类型的处理机制的探讨。

    在Mysql中,varchar类型的单位其实是 “字符” ,而非我们字节。是一种自适应的存储方式。

    例如:VARCHAR(3)  既可以存储 "abc"三个英文字符 ,此时存储长度为3个字节,也可以存储 "数据库" 三个中文字符,此时存储长度不少于9个字节,但无法存下 "abcd"四个英文字符。

    因此我们在设计数据库字段,遇到可变长varchar类型时,应当考虑其实际空间占用上限。

    值得注意的是,可变长字段的占用上限与数据库采用的编码相关,我们的数据库采用的UTF-8,最宽字符长度为 3字节中文字符。因此可计算出索引字段的最大设计长度为

    767/3=255,即 当数据库编码为UTF-8时,索引字段能支持的最大VARCHAR字段长度定义为VARCHAR(255)

    以此扩展,如果为UTF8-BM4编码,此时该编码支持4字节的宽字符,长度设计上限则应为 767/4 = 191,即 VARCHAR(191)

    外链参考:https://www.jianshu.com/p/83bdcf9bd5a8

    注:对定长类型按类型指定长度或者类型默认字节数计算即可。

    相关文章

      网友评论

          本文标题:Mysql索引过长问题解析

          本文链接:https://www.haomeiwen.com/subject/ljldwhtx.html