索引MySql TEXT列?

44 mysql indexing

我使用MySql运行它,它似乎不喜欢TEXT.使用SQL服务器我使用nvarchar(max)MySql中应该使用什么?在其他表中,一些字段将是描述,可能很长,所以目前我认为固定长度是坏的.

create table if not exists 
    misc_info (
        id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
        key TEXT UNIQUE NOT NULL,
        value TEXT NOT NULL
    )ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)

Pab*_*ruz 50

MySQL中的文本列不能有UNIQUE索引.

如果要在TEXT或BLOB字段上建立索引,则必须指定固定长度才能执行此操作.

来自MySQL 文档:

BLOB和TEXT列也可以编入索引,但必须给出前缀长度.

例:

CREATE UNIQUE INDEX index_name ON misc_info (key(10));
Run Code Online (Sandbox Code Playgroud)

  • 你如何确定要设定的长度?长度是字符还是字节? (16认同)
  • 如果索引有限,MySQL如何处理哈希冲突? (5认同)
  • 你如何在查询中充分利用密钥?在字段上使用子字符串? (3认同)
  • @KDawg,来自文档:`非二进制字符串类型的前缀长度以字符为单位,二进制字符串类型以字节为单位。也就是说,索引条目由 CHAR、VARCHAR 和 TEXT 列的每个列值的第一个长度字符以及 BINARY、VARBINARY 和 BLOB 列的每个列值的第一个长度字节组成。 (3认同)