2010-05-22 25 views
34

Ejecuté esto usando MySql y parece que no me gusta TEXT. Con el servidor SQL utilizo nvarchar(max) ¿Qué debo usar en MySql? En otras tablas, algunos campos serán descripciones y pueden ser largos, por lo que en este momento estoy pensando que la longitud fija es mala.¿Indizar una columna de texto 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; 

Respuesta

38

No puede tener un índice UNIQUE en una columna de texto en MySQL.

Si desea indexar en un campo de TEXTO o BLOB, debe especificar una longitud fija para hacerlo.

De MySQL documentation:

BLOB y TEXT columnas también se pueden indexados, pero una longitud de prefijo debe ser dado.

Ejemplo:

CREATE UNIQUE INDEX index_name ON misc_info (key(10)); 
+3

¿Y cómo hace un buen uso de la clave en sus consultas? ¿Usar la subcadena en el campo? –

+0

Necesita un ÍNDICE DE TEXTO COMPLETO para mejorar el tipo de consultas de "subcadena". Un índice regular es inútil. –

+13

¿Cómo se determina qué longitud establecer? ¿La longitud es en caracteres o bytes? – KDawg

3

Creo que se ahoga con el nombre key campo en lugar del tipo de texto (que debe estar perfectamente bien).

Reserved Words in mySQL

(. Y como ya se dijo @Pablo, los campos memo no pueden ser únicos)

+1

Todavía no he visto a MySQL (de la versión 5 a la 5.6) ahogarse con el uso de una ReservedWord. ReservedWords solo requiere un escape adicional en la selección. – HoldOffHunger

3

dos cosas:

  1. clave es una palabra reservada.
  2. Debe especificar una longitud para UNIQUE(key) TEXT value.
Cuestiones relacionadas