【问题标题】:MySQL error: "Column 'columnname' cannot be part of FULLTEXT index"MySQL 错误:“列 'columnname' 不能成为 FULLTEXT 索引的一部分”
【发布时间】:2010-10-13 18:38:15
【问题描述】:

最近我将一堆列更改为 utf8_general_ci(默认的 UTF-8 排序规则),但是在尝试更改特定列时,我收到了 MySQL 错误:

Column 'node_content' cannot be part of FULLTEXT index

在查看文档时,MySQL 似乎在某些多字节字符集(例如 UCS-2)上的 FULLTEXT 索引存在问题,但它应该适用于 UTF-8。

我使用的是最新的稳定 MySQL 5.0.x 版本(我相信是 5.0.77)。

【问题讨论】:

    标签: mysql character-encoding full-text-search


    【解决方案1】:

    糟糕,我找到了问题的答案:

    FULLTEXT 索引的所有列不仅必须具有相同的字符集,而且必须具有相同的排序规则

    我的 FULLTEXT 索引在其中一列上有 utf8_unicode_ci,在其他列上有 utf8_general_ci。

    【讨论】:

      【解决方案2】:

      只是为了补充 Thomas 的好建议:为了在 PHPMyAdmin 中解决问题,您必须同时更改所有列的字符集。

      只是浪费了半天时间,一次又一次地尝试更改列,并不断收到有关 FULLTEXT 索引的错误消息。

      【讨论】:

      • 我相信这将是 MySQL 的限制,而不是 phpMyAdmin 的限制——您必须在同一个 ALTER 命令中更改所有这些限制,因为您不能在 FULLTEXT 索引中使用混合排序规则,即使如果只是“一小会儿”。
      【解决方案3】:

      适用于DBeaver/数据库工具用户。

      当您使用界面修改多列时,该工具会生成如下命令:

      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;
      

      这不起作用,因为您必须同时修改字符集。

      因此,您必须在一个命令中手动更改它:

      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 还是 utf8mb4See here.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 2015-06-23
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        相关资源
        最近更新 更多