Windows下安装的Mysql默认是不区分大小写的,而Linux下安装的Mysql默认是区分大小的,包括对数据库名、表名、表的的别名和变量名区分大小写,而对列名和列的别名不区分大小写。下面针对这种情况进行验证并作出相应的解决方法。
1、验证Linux下Mysql默认情况
现在mysql中有一个数据库为mytest,它有一个数据表user(name,sex),表中存放有一条数据。以下分别对数据库名,表名,表的别名,列名进行大小写区别验证。
a.默认对数据库名区分大小写
由于建立的数据库为全部小写mytest,当大小写混合输入use myTEST时,提示未知数据库,即查找不到对应的数据库名,而小写输入use mytest时,查找正常,因此可以说明默认对数据库名区分大小写。
b.默认对表名区分大小写
当查询时用表名的大写USER,提示表名不存在,而当用小写user时查询正常,可以说明默认对数据表区分大小写。
c.默认对表的别名区分大小写
用t作为表user的别名,当查询列“name”的值用大写的T时提示未知列名,而用小写t时查询正常,可以说明默认对表的别名区分大小写。
d.对列名不区分大小写
由上面可以看出,不管列名用大写NAME还是用小写name,都可以正常查询,可以说明对列名不区分大小写。
2、解决方法
a.用root账号登陆Linux系统,在/etc/my.cnf文件中的[mysqld]后添加lower_case_table_names=1,如下:
保存并退出。
b.重启数据库
经过上面的操作,就可以令mysql忽略对大小写的敏感。
注意:
①lower_case_table_names 设置为0,表示区分大小写;lower_case_table_names 设置为1,,表示忽略大小写,创建的数据库,表都是以小写形式存放在磁盘上,对于sql语句都是转换为小写对表和DB进行查找;
②当设置了lower_case_table_names = 1时,需要先将原来的数据库名和表名转换为小写,再重启数据库实例,否则就会出现数据库名和表名不存在的情况,所以要想忽略大小写,还需要提前将大写数据库名和表名更改为小写,否则会报错,另外数据库名无法rename可以新建一个小写的数据库名;
③如果在/etc或/etc/mysql下没有找到my.cnf的话,需要从其它地方拷贝过来,这是因为使用rpm方式安装时,默认是没有在/etc或/etc/mysql目录下生成my.cnf的,我们可以在/usr/share/mysql/下找到*.cnf文件,拷贝其中的一个放到/etc下并更名为my.cnf,然后再按上面的方法进行即可。
3、验证是否修改成功
a.验证数据库名:
由以上看出,已忽略对数据库名大小写的区分。
b.验证表名:
由以上看出,已忽略对表名大小写的区分。
c.验证表的别名:
由以上看出,已忽略对表的别名大小写的区分。
至此,关于linux中mysql默认对大小写区分的解决方法已完成。