源库参数lower_case_table_names=1时,为什么不允许迁移包含大写字母的库或者表
场景描述
当源库参数lower_case_table_names=1时,无法迁移包含大写字母的库或者表。
问题分析
当源库的lower_case_table_names 参数值为1时,MySQL会将库名或者表名转换成小写再进行查找。若存在以大写字母形式创建的库或者表,那么在lower_case_table_names参数值为1的情况下,MySQL将无法找到这个库或表,报告查询失败。也就是说,若lower_case_table_names的参数值为1时,大写字母的库或表很可能是不可访问的。
解决方案
目前针对该情况,分别提供如下解决方案:
方法一
修改源库lower_case_table_names的参数值为0 (即大小写敏感),并且保证源库与目标库的该参数值一致。
方法二
若无法永久修改lower_case_table_names,可临时将源库lower_case_table_names修改为0,然后执行如下操作。
- 对于表,可以使用如下语句将表名转换为小写:
alter table `BigTab` rename to `bigtab`
- 对于库,则需要导出后,修改库名为小写,再进行导入。
修改库名或表名之后,需要维护权限的一致性,以免影响应用访问。
方法三
对象选择时不迁移该库或者该表。