web-dev-qa-db-fra.com

Indexer une colonne MySql TEXT?

J'ai couru cela en utilisant MySql et il ne semble pas aimer TEXT. Avec SQL Server j'utilise nvarchar(max) Que dois-je utiliser dans MySql? Dans d'autres tableaux, certains champs seront des descriptions et peuvent être longs, donc pour le moment je pense que la longueur fixe est mauvaise.

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;
43
user34537

Vous ne pouvez pas avoir un index UNIQUE sur une colonne de texte dans MySQL.

Si vous souhaitez indexer sur un champ TEXT ou BLOB, vous devez spécifier une longueur fixe pour ce faire.

Depuis MySQL documentation :

Les colonnes BLOB et TEXT peuvent également être indexées, mais une longueur de préfixe doit être indiquée.

Exemple:

CREATE UNIQUE INDEX index_name ON misc_info (key(10));
49
Pablo Santa Cruz

Deux choses:

  1. La clé est un mot réservé.
  2. Vous devez spécifier une longueur pour une UNIQUE(key) TEXT value.
4
khai_khai

Je pense que cela étouffe le nom du champ key plutôt que le type TEXT (qui devrait être parfaitement bien).

Mots réservés dans mySQL

(Et comme @Pablo l'a déjà dit, les champs mémo ne peuvent pas être uniques.)

2
Pekka 웃