Si je crée une table avec une colonne text
CREATE TABLE foo ( bar text );
Je ne peux pas indexer la colonne bar
.
MariaDB [test]> CREATE INDEX foo_bar_idx ON foo ( bar );
ERROR 1170 (42000): BLOB/TEXT column 'bar' used in key specification without a key length
Si je HELP CREATE INDEX
, Je reçois,
Syntax:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option] ...
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string';
KEY_LENGTH
pas seulement mentionné KEY_BLOCK_SIZE
, mais si je l'utilise en option, j'obtiens
MariaDB [test]> CREATE INDEX foo_bar_idx ON foo ( bar ) KEY_LENGTH = 5;
ERROR 1911 (HY000): Unknown option 'KEY_LENGTH'
Dans MySQL, la longueur de clé est ajoutée en tant que modificateur de type et placée entre parenthèses colname()
, vous pouvez la fournir à CREATE INDEX
comme ça,
CREATE INDEX foo_bar_idx ON foo ( bar(500) );
Cela fait partie de index_col_name
, (sauf que ce n'est pas facultatif sur le texte, alors ignorez le []
)
index_col_name:
col_name [(length)] [ASC | DESC]
Vous pouvez également souhaiter un index de recherche en texte intégral (FTS) fournissant à la place la fonctionnalité MATCH
CREATE FULLTEXT INDEX foo_bar_ftsidx ON foo ( bar );
Pour plus d'informations, consultez les MySQL docs on Full Text Search