修改 mysql COLLATE_MySQL修改某一列collate时遇到的问题

在测试歌手名排序时,我曾临时地将歌手的name列改成了utf8_bin整理排序,区分大小写。

其他列默认为utf8_general_ci排序。

后来忘记改回来了,

今天测试时发现一个bug,搜歌手输入Linkin Park可以搜到,而linkin park却搜不到:

该函数我在django中已经用icontains忽略大小写,

确认view函数没有问题,我排查到原来是name列被错误定义为了utf8_bin排序,所以大小写是不同的。

原先的定义是:

name varchar(100) character set utf8 collate utf8_bin not null;

我直接修改某列,就执行:

alter table musician modify name varchar(100) not null;

这个表也就9000多条记录,执行了半天还一直卡在那里。

show processlist,发现state居然是Locked,无语!

kill对应的id,换成执行:

alter table musician convert to character set utf8 collate utf8_general_ci;

两秒就完成了。

具体原因没有深究,或许MySQL版本较低(我用的5.5),DDL效率总是不尽人意。

在修改记录较多的表时,尤其费时,听说是因为MySQL先copy整个表再做修改。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值