Linux下设置MySQL表名不区分大小写

问题引出

    mysql在linux系统下,表名是区分大小写的,因此有时会出现“这张表明明存在却找不到”的情况,尤其是在使用一些持久层框架的时候。


看一些博客时遇到的问题

    最常见的说法是修改这个文件:/etc/my.cnf,但是我却找不这个文件Linux下设置MySQL表名不区分大小写_第1张图片.
    又去寻找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
    Linux下设置MySQL表名不区分大小写_第2张图片
  • 然后重启mysql服务,执行这个命令:service mysql restart

原理

  • 在mysql中有一个全局变量,名字叫做“lower_case_table_names”。
  • 这个变量对数据库名、表名、表的别名起作用。
  • 这个变量有三个可选值:0、1、2
    • 设置为0时
      • 存储时大小写敏感
      • 比较时大小写敏感
    • 设置为1时
      • 存储时会把大写字母转换为小写
      • 比较时不区分大小写
    • 设置为2时
      • 存储时大小写敏感
      • 比较时都转换为小写
  • 在linux下这个变量默认为0,也就是说表名对大小写敏感;在windows下默认为1。

你可能感兴趣的:(Linux)