在创建带有复合索引的 MySQL 表时,用户可能会遇到错误“指定的密钥太长;最大密钥长度为 1000 字节”。此错误表明索引列的组合长度超过了允许的最大存储大小 1000 字节。
提供的代码片段中的问题在于索引复合索引的长度过大:
KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
要解决此错误,请考虑以下:
1。优化索引长度:
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
2.确定最佳前缀长度:
使用以下查询确定给定列的最佳前缀长度:
SELECT ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10, ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20, ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50, ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100 FROM `pds_core_menu_items`;
例如,如果查询返回:
+---------------+---------------+---------------+----------------+ | pct_length_10 | pct_length_20 | pct_length_50 | pct_length_100 | +---------------+---------------+---------------+----------------+ | 21.78 | 80.20 | 100.00 | 100.00 | +---------------+---------------+---------------+----------------+
表示80%的字符串少于20个字符,所以前缀长度为50足够了。
3.调整 INT 数据类型:
后跟数字参数的 INT 数据类型(例如 INT(1))不会影响存储或值范围。 INT 数据类型始终占用 4 个字节,允许的值范围为 -2147483648 到 2147483647。数字参数仅影响显示期间的填充。
以上是如何解决 MySQL 错误 1071:'指定的密钥太长;最大密钥长度为 1000 字节”?的详细内容。更多信息请关注PHP中文网其他相关文章!