`
darrenzhu
  • 浏览: 804125 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

创建前缀索引报长度超出错误

阅读更多
表结构定义如下:
CREATE TABLE `sku` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键' ,
`sku_code` VARCHAR(20) NOT NULL COMMENT '商品编码' ,
`version` BIGINT UNSIGNED NOT NULL COMMENT '商品信息版本,初始值1,每修改一次版本值增加1' ,
`sku_name` VARCHAR(200) NOT NULL COMMENT '商品名称' ,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_idx_sku_code_version` (`sku_code`,`version`) USING BTREE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci;

执行
create index idx_sku_name on msm_sku(sku_name);然后发现报如下错误

Error: Specified key was too long; max key length is 767 bytes
SQLState:  42000
ErrorCode: 1071

2个问题?
1)为什么报too long 错误?
2)为什么 max key length is 767 bytes,767怎么来的?


回答:
1)报too long的错误,是因为utm8mb4编码格式下,一个汉字占4个字节,由于定义的是varchar(200),所以最大字节数=200*4 = 800 > 767,所以报too long 错误

2)why 767?
这就是mysql在某个引擎某个编码下对索引长度有最大限制。参见
mysql 索引长度限制详解
https://blog.csdn.net/guyan0319/article/details/79715761

解决方案:
建立前缀索引,即建索引时指定字符长度
create index idx_sku_name on sku(sku_name(50));
或者
ALTER TABLE `sku`
ADD INDEX idx_sku_name (sku_name(50));

分享到:
评论

相关推荐

    最长公共前缀1

    这里的关键在于,我们始终以长度较短的字符串为准,以确保不会超出任何字符串的范围。 在C++中,我们可以定义一个辅助函数`findstr`,接收两个字符串作为参数,返回它们的最长公共前缀。这个函数通过比较字符串的每...

    达梦数据库_SQL语言手册

    成为国际标准以后,其影响远远超出了薮据库领域。例如在 软件工程、人工智 能、分布式等领域,人们不仅把作为检索数据的语言规范,而且也把作为检索图形、 图象、声音、文字等信息类型的语言规范。目前,世界上大型的...

    串的创建及KMP算法.docx

    如果索引或长度超出串的实际范围,函数将返回空串。 6. **串的插入**:`InStr` 函数将串`t`插入到串`s`的第`i`个位置。它创建一个新的串`str`,并根据索引`i`将`s`的前`i-1`个字符、`t`的所有字符和`s`剩余的字符...

    mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法

    当遇到MySQL创建数据库或表时出现索引长度过长的错误时,我们首先需要明确问题产生的具体原因,然后根据实际情况选择合适的解决方法。无论是通过调整字段长度、修改字符集还是优化索引设计,都能有效地解决问题。...

    MySQL使用TEXT/BLOB类型的知识点详解

    - 索引限制:TEXT和BLOB只能创建前缀索引,且MySQL对索引字段长度有限制。 4. **解决办法** 实施严格的数据库设计规范,并借助自动化工具进行审核,确保符合规范。对于大规模系统,手动审核每个表和字段是不现实...

    python基础教程(新手必看)

    索引超出范围会产生错误。字符串也可以像列表一样使用索引。 2. 分片 分片是提取序列的部分元素的方法。例如,tag[0:2]会获取tag字符串中从位置0到位置1的子字符串。步长可以是正数也可以是负数。 3. 序列相加和...

    2012年1月自考数据结构试题真题1

    **串的长度必须大于零**:错误。空串也是合法的串,其长度为0。 **5. 无向完全图G有n个结点,则它的边的总数为** - **答案解析**: 无向完全图中,任意两个不同节点之间都有一条边相连。 - A. **n²**:错误。...

    树状数组-docx资源

    **树状数组**,也被称为**二叉索引树(Binary Indexed Tree, BIT)**或者**Fenwick树**,是一种非常高效且灵活的数据结构,主要用于处理数组前缀和、区间和以及相应更新问题。相比传统的线段树等数据结构,树状数组...

    数据库表命名规范.pdf

    - **长度限制**:字段名长度限制在30个字符以内,超出长度可通过合理缩写解决。 #### 三、索引命名规则 索引是提高数据库查询效率的重要手段,其命名规则如下: - **格式固定**:索引名遵循`IDX_table_<column>_...

    Java 中 String 类的常用方法

    如果连接后的字符串长度超出了基本类型char的最大值,将会抛出OutOfMemoryError异常。 5. `indexOf(String str)`和`lastIndexOf(String str)`方法用于查找指定子字符串在当前字符串中首次和最后一次出现的位置。...

    数据库设计规范.doc

    表名的长度限制在30个字符内,超出时可以使用缩写。例如,`description` 可缩写为 `desc`,`information` 缩写为 `info`,`address` 缩写为 `addr`。 接着,字段名命名规则也遵循小写原则,使用有意义的单词或其...

    海量数据处理的方法

    虽然Bloom Filter可能会产生误报(即错误地报告一个元素属于集合),但它不会漏报。 **适用场景**: - 数据字典或判重检查。 - 集合求交集等操作。 **原理与要点**: - **位数组 + 多个独立哈希函数**:将元素通过多...

    最新2020年JAVA程序员笔试模拟题库300题(含标准答案).docx

    由于数组索引从0开始,所以`s[9]`是数组的最后一个元素,其初始值为`null`,选项B正确,而`s[10]`超出了数组范围,不存在此元素,选项C错误。数组元素不会自动初始化为0,因此`s[9]`不会为0,选项D错误。 2. **J2EE...

    高质量c编程指南(强烈推荐)

    2. 避免数组越界:确保数组索引不会超出其边界,使用size_t类型表示数组长度。 3. 使用size_t类型:在涉及内存大小和索引计算时,使用size_t以确保安全。 八、资源管理 1. 使用RAII(Resource Acquisition Is ...

    多媒体图像压缩算法lzw编码

    若前缀长度为0,表示根节点。 5. **Code**:编码,用于标识字符串在字典中的位置。 6. **Entry**:编码与其代表的字符串的对应关系。 **简单示例**: 假设原始数据为ABCCAABCDDAACCDB,有4个字符(A、B、C、D),可以...

    KMP 算法学习笔记.pdf

    - 对于字符串 `s` 的任意子串 `t`,其最长公共前后缀是指 `t` 的前缀和后缀中长度最长且相同的子串。例如,对于子串 `t = "abab"`,其最长公共前后缀是 `"ab"`。 #### 四、KMP 算法的实现步骤 1. **构造 next 数组...

    北交《JAVA语言设计》在线作业一-0010参考答案.docx

    在示例代码中,试图访问`i[5]`,而数组长度为5,所以这将在运行时抛出`ArrayIndexOutOfBoundsException`。 6. **赋值语句**:在Java中,正确的赋值语句应该是简单的操作,如`i = i + 2`。`i++ - --j;`这样的复合...

    专升本计算机软件基础模拟题试卷.pdf

    2. **数字表示**:C语言中的数字常量可以用八进制(前缀0)、十进制(无前缀)或十六进制(前缀0x或0X)表示。题目中数字029被视为非法数,因为它不是一个有效的八进制数。 3. **程序执行**:C程序的执行通常从main...

    JAVA字符串截取方法总结[文].pdf

    - `setLength(int length)`:设置缓冲区的长度,超出部分会被删除,不足部分填充空字符。 以上就是Java中字符串截取及相关操作的总结,这些方法对于日常的编程工作非常实用,掌握它们能够有效地处理字符串数据。

    数据结构习题集答案

    如果i小于1,k小于0,或者i+k-1超出线性表的长度,则返回错误状态INFEASIBLE。合法的情况下,它通过循环移动元素实现删除,最后更新线性表的长度,返回OK表示操作成功。 2.11 Status Insert_SqList(SqList &va, int...

Global site tag (gtag.js) - Google Analytics