MySQL错误:“列'列名'不能是FULLTEXT索引的一部分”

时间:2009-03-17 05:14:06

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

最近我将一堆列更改为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)。

3 个答案:

答案 0 :(得分:32)

哎呀,所以我找到了问题的答案:

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

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

答案 1 :(得分:5)

只是为了添加Thomas的好建议:要在PHPMyAdmin中解决问题,你必须在同一时间更改所有列的字符集。

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

答案 2 :(得分:0)

对于 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 utf8mb4 See here