mysql问题 报错

  1. [MySQL] specified key was too long max key length is 767bytes 编码utf8mb4.我的没问题,同事的有问题。百度说索引长度过长。应该是mysql版本不一致。我的是5.7.22.
    表结构:
CREATE TABLE `mini_model_has_permissions` (
  `permission_id` int(10) unsigned NOT NULL,
  `model_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `model_id` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`permission_id`,`model_id`,`model_type`),
  KEY `mini_model_has_permissions_model_id_model_type_index` (`model_id`,`model_type`),
  CONSTRAINT `mini_model_has_permissions_permission_id_foreign` FOREIGN KEY (`permission_id`) REFERENCES `mini_permissions` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

先说字段含义:varchar(50) 50含义:mysql4.1之前,代表50个字节。之后的版本代表字符。
不管中英文,都是50个字符。utf8编码 字节占用150,utfmb4编码占用字节200。

允许索引字段前缀的字节限制为 767 bytes.
字符集为 utf8mb4, 所以可申请索引的 varchar 长度为:767/4 ≈ 191字符;
而字符集为 utf8 时,可设置的创建索引 varchar 长度为: 767/3 ≈ 255 字符;

在 5.6.3 之后的版本,字节限制提高到了 3072 bytes.
字符集为 utf8mb4 时,限制 varchar 字符为:3072/4 = 768;
字符集为 utf8 时,限制 varchar 字符为:3072/3 = 1024;

因此字符集为 utf8mb4 时,将 name 字段索引前缀长度控制在 768 以内即可成功创建索引。
参考:https://blog.csdn.net/u012099869/article/details/53815084
https://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes
3.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值