mysql表忽略大小写
因为linux下mysql默认是要区分表名大小写的。mysql是否区分大小写设置是由参数lower _ case _ table _ names决定的,其中:
lower_case_table_names = 0
区分大小写(即对表名大小写敏感),默认是这种设置。这样设置后,在mysql里创建的表名带不带大写字母都没有影响,都可以正常读出和被引用。变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感,其中:ON说明对文件名的大小写不敏感,OFF表示
SHOW VARIABLES LIKE ‘%case%’
Variables _name | Value |
---|---|
lower_case_file_system | ON |
lower_case_table_names | 0 |
lower_case_table_names = 1
不区分大小写(即对表名大小写不敏感)。这样设置后,表名在硬盘上以小写保存,MySQL将所有表名转换为小写存储和查找表上。该行为也适合数据库名和表的别名。
SHOW VARIABLES LIKE ‘%case%’
Variables _name | Value |
---|---|
lower_case_file_system | ON |
lower_case_table_names | 1 |
也就是说,mysql设置为不分区大小写后,创建库或表时,不管创建时使用大写字母,创建成功后,都是强制以小写保存!
配置Mysql表明忽略大小写
修改mysql为不区分表名大小写设置:
[root@test-huanqiu ~]# mysqladmin -uroot -p shutdown //以安全模式关闭数据库
[root@test-huanqiu ~]# vi /etc/my.cnf //添加下面一行设置
.....
[mysqld]
lower_case_table_names=1
.....
[root@test-huanqiu ~]# service mysqld start //启动mysql
出现问题
在linux环境中,数据库中表存在大小写时,进行设置 lower_case_table_names = 1 后,将调用数据库表的时候报表不存在,但是通过show tables任然可以查看到有这张表的存在。
解决办法
- 先在my.cnf里将lower_case_table_names参数再次调整为0,改成区分大小写
- 然后mysqladmin -uroot -p shutdown 以安全模式关闭数据库
- 登陆mysql数据库,”alter table 旧表名 rename 新表名” 将带大写字母的旧表改为小写表名
- 最后再启动mysql即可!