1170: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length(在键定义中使用 BLOB/TEXT 列但未指定键长度)
MySQL含义
在索引/键定义中使用了 BLOB 或 TEXT 列,但未指定前缀长度。这些类型无法整体索引;只能索引前 N 个字符/字节。
原因
在 CREATE TABLE 或 CREATE INDEX 中对 TEXT/BLOB 列定义 INDEX/UNIQUE/PRIMARY KEY 时未指定长度。由于无法整体索引这些可能非常大的值,MySQL 要求指定前缀长度。
解决方法
在索引中指定前缀长度,例如 INDEX (description(255))。示例:ALTER TABLE my_table ADD INDEX idx_description (description(191));(由于 InnoDB 键前缀限制,utf8mb4 下常用 191)。如需全文搜索,考虑使用 FULLTEXT 索引。对于应当简短且唯一的字段,将列改为 VARCHAR 可能更合适。
同一数据库的其他条目
- 1836ER_READ_ONLY_MODE: Running in read-only mode(以只读模式运行)
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated(违反 CHECK 约束)
- 1118ER_TOO_BIG_ROWSIZE: Row size too large(行大小过大)
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log(不安全的语句被写入二进制日志)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text(无效的 JSON 文本)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value(表中没有对应该值的分区)
- 1049Unknown database 'name'(未知数据库 'name')