本文主要是介绍mysql collation 修改生效问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
author:石鲁坤
因为工作需求关系,公司要求mysql数据库对大小敏感,因为在建库的时候习惯性的在配置文件里配置
character_set_server = utf8
collation_server = utf8_general_ci
其中ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的,这样在需要判断大小时就不能满足要求了
但是我们将表的collation修改为可以判断大小写的utf8_bin后,发现查询时仍然不能区分大小写
难道这是mysql的bug吗,我为此特地测试了一下,现将自己的结论总结下。
mysql 的collation作用于3个层面,并且下级遵循上级的配置分为
数据库的collation
表的 collation
字段的 collation
原则:修改数据库的collation,对修改后新建的表才会生效,已存在表不生效
修改表的 collation,对修改后新建的字段才会生效,已存在字段不生效
修改字段的 collation,对修改后新写入生效,同时对已存在的也生效
代码如下:
ALTER DATABASE `basename` CHARACTER SET utf8COLLATE utf8_bin;
ALTER TABLE `basename`.`tablename` COLLATE=utf8_bin;
ALTER TABLE `tablename` MODIFY COLUMN `name` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin;
同时也可以在my.cnf中修改 collation_server = utf8_bin (重启生效)
该参数不支持动态修改。
如果需要修改表很多,可以使用导出导入的方式,修改表的collation后导出,重新建表导入时字段将遵循表的collation
如有问题探讨,请加QQ群:695182221
这篇关于mysql collation 修改生效问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!