MySQL error: “la Colonna “columnname” non può essere parte di FULLTEXT index”

Di recente ho cambiato un sacco di colonne di utf8_general_ci (il default UTF-8 di confronto), ma quando si tenta di modificare una colonna particolare, ho ricevuto il MySQL error:

Column 'node_content' cannot be part of FULLTEXT index

Guardando attraverso documenti, sembra che MySQL ha un problema con gli indici FULLTEXT su alcuni set di caratteri multibyte come UCS-2, ma che dovrebbe funzionare su UTF-8.

Ho su l’ultima versione stabile di MySQL 5.0.x release (5.0.77 credo).

 

3 Replies
  1. 33

    Oops, così ho trovato la risposta al mio problema:

    Tutte le colonne di un indice full-text deve avere non solo lo stesso set di caratteri, ma anche il stesse regole di confronto.

    Mio indice full-text aveva utf8_unicode_ci una delle sue colonne, e utf8_general_ci le altre colonne.

  2. 5

    Solo per aggiungere a Thomas un buon consiglio: E per sistemare le cose in PHPMyAdmin devi cambiare il set di caratteri e per tutte le colonne, ALLO STESSO TEMPO.

    Sprecato mezza giornata cercando di nuovo e di nuovo per cambiare le colonne, uno alla volta, e continuamente il messaggio di errore circa l’indice full-text.

    • Credo che sarebbe MySQL è un limite piuttosto che un phpMyAdmin è necessario modificare tutti nello stesso comando ALTER perché non si può avere misto di regole di confronto in un indice full-text, anche se è solo per un “po’”.
  3. 0

    Per DBeaver/strumento di database di utenti.

    Quando si utilizza l’interfaccia per modificare più di una colonna, lo strumento generare i comandi come questo :

    ALTER TABLE databaseName.tableName MODIFY COLUMN columnName1 text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL;
    ALTER TABLE databaseName.tableName MODIFY COLUMN columnName2 varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL;

    Questo non funziona perché è necessario modificare il set di caratteri allo stesso tempo.

    Quindi, è necessario modificare manualmente, in un unico comando :

    ALTER TABLE databaseName.tableName 
    MODIFY COLUMN columnName1 text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
    MODIFY COLUMN columnName2 text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL;

    utf8 o utf8mb4 ? Vedi qui.

    • Questo può essere un DBeaver specifica limitazione. Credo che phpMyAdmin può modificare più colonne in una dichiarazione. Non so MySQL Workbench come io non lo uso. Questa è una buona cosa da sapere, però, come posso sicuramente vedere che è difficile capire perché si è rifiutato.

Lascia un commento