更改已建立索引的列的排序规则而不更改数据

时间:2015-07-01 17:00:48

标签: mysql indexing blob collation

我正在尝试更改一堆列上的排​​序规则。我不想弄乱我当前的数据,所以我一直在寻找像this answer那样的事情:

  

ALTER TABLE something MODIFY name BLOB;

     

下一步是将列转换为具有正确字符集的非二进制数据类型:

     

ALTER TABLE something MODIFY name VARCHAR(12) CHARACTER SET hebrew COLLATE hebrew_bin;

     

或试试这个:

     

ALTER TABLE something MODIFY name VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_unicode_ci

不幸的是,mysql不允许我将索引列转换为blob。

  

SQL错误:[1170] - BLOB / TEXT列' baz'在没有密钥长度的密钥规范中使用

     

查询:ALTER TABLE foo.bar MODIFY baz blob;

有解决方法吗?或者我是否需要以某种方式删除索引并在转换后重建它们?

1 个答案:

答案 0 :(得分:1)

除非CHARACTER SET错误但数据“正确”,否则不要执行“两步更改”。如果您想转换两者 CHARACTER SET和数据,请使用     ALTER TABLE CONVERT TO CHARACTER SET ...;

参见my blog中的案例5,正如您可能猜到的那样,还有其他案例。

至于错误1170--与某些INDEX有关。在我帮助你之前,先确定它是否相关。