我正在尝试更改一堆列上的排序规则。我不想弄乱我当前的数据,所以我一直在寻找像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;
有解决方法吗?或者我是否需要以某种方式删除索引并在转换后重建它们?
答案 0 :(得分:1)
除非CHARACTER SET
错误但数据“正确”,否则不要执行“两步更改”。如果您想转换两者 CHARACTER SET
和数据,请使用
ALTER TABLE CONVERT TO CHARACTER SET ...;
参见my blog中的案例5,正如您可能猜到的那样,还有其他案例。
至于错误1170--与某些INDEX
有关。在我帮助你之前,先确定它是否相关。