有一次面试被面试官问了这个问题,当时没答出来,后续在网上也没有找到相关资料,今天无意中发现有个博客讲了这个,分享一下我自己的理解。
首先需要了解的是常见的mysql
引擎innodb
的索引在以前的版本中长度是固定的,即只能有767个字节,而我们常见的utf-8
编码需要三个字节来表示一个字符,而 767 / 3 = 255 所以,这就是默认255的由来
而后又出现了uft-8mb4
用四个字节表示一个字符(为了兼容emoji表情),所以也有默认长度 191 的,因为 767 / 4 = 191
当然,这都是过去遗留下来的东西,现在固定长度的索引已经成为历史,而为了保持兼容性,这些默认值却留了下来。
参考链接:
/blog/varchar-191#fn-2
对你有帮助的话,点个赞吧:)