Mysql索引过长问题解析

2020-05-15  本文已影响0人  As_breath

近期遇到两次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

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

上一篇下一篇

猜你喜欢

热点阅读