在测试歌手名排序时,我曾临时地将歌手的name列改成了utf8_bin整理排序,区分大小写。
其他列默认为utf8_general_ci排序。
后来忘记改回来了,
今天测试时发现一个bug,搜歌手输入Linkin Park可以搜到,而linkin park却搜不到:
http://www.fachun.net/search/Linkin%20Park?sid=0
该函数我在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整个表再做修改。