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