问题引出
mysql在linux系统下,表名是区分大小写的,因此有时会出现“这张表明明存在却找不到”的情况,尤其是在使用一些持久层框架的时候。
看一些博客时遇到的问题
最常见的说法是修改这个文件:/etc/my.cnf
,但是我却找不这个文件.
又去寻找etc目录没有my.cnf目录怎么办,最常见的说法是把这个文件复制一份到etc目录下,并改名为"my.cnf",这个文件是:/user/share/mysql/my-medium.cnf
,但是连这个文件也没有,我也是醉了。
这应该是版本的问题,不再深究。
问题解决
环境
- 电脑系统:Ubuntu 18.04
- mysql版本:5.7.24-0ubuntu0.18.04.1 (Ubuntu)
- 打开文件
/etc/mysql/mysql.conf.d/mysqld.cnf
在"[mysqld]"下添上这样一句代码:lower_case_table_names = 1
- 然后重启mysql服务,执行这个命令:
service mysql restart
原理
- 在mysql中有一个全局变量,名字叫做“lower_case_table_names”。
- 这个变量对数据库名、表名、表的别名起作用。
- 这个变量有三个可选值:0、1、2
- 设置为0时
- 存储时大小写敏感
- 比较时大小写敏感
- 设置为1时
- 存储时会把大写字母转换为小写
- 比较时不区分大小写
- 设置为2时
- 存储时大小写敏感
- 比较时都转换为小写
- 设置为0时
- 在linux下这个变量默认为0,也就是说表名对大小写敏感;在windows下默认为1。