最近公司有个项目需要将原来的MySql数据库迁移到Linux系统下,直接测试网页应用,突然出现了许多表找不到的错误,通过查询资料,发现原来在Linux下的Mysql的表名是大小写敏感的,并且发现有一个参数可以控制表名的识别方式,参数如下:
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names=2, 表名存储为给定的大小写但是比较的时候是小写的
为了解决应用在Linux下访问Mysql表的问题,我们做了以下的处理:
1.将数据库表名统一转换为小写
这里不需要手工来改下,可以通过自动生成改写语句来操作,生成转换的语句如下:
SELECT concat( 'alter table ', TABLE_NAME, ' rename to ', LOWER( TABLE_NAME ), ';' ) FROM information_schema.TABLES WHERE TABLE_SCHEMA = '数据库名'
生成后将语句拷贝到Mysql执行即可。
2.修改Mysql参数,并重启MySQL数据库
lower_case_table_names=1
最后可以欢乐的使用系统了:)