我们大家可能都碰到过这种情况:在Linux下,MySQL的表名区分大小写,而在Windows下是不区分,从Windows下导出的数据脚本中使用的是小写,而Hibernate生成的SQL中表名是大写的,所以查不出数据。如下,我的一个Windows下的项目移植到Linux环境中就因为MySQL严格区分大小写问题报错:

这个时候怎么办呢,显然改程序是不行的,时间上也不允许,所以只能设置MySQL数据库不区分大小写了,大家看以下步骤:

1、查询MySQL是否设置了区分大小写

show variables like "%case%";

其中lower_case_table_names代表了 0是区分大小写; 1是不区分大小写。显然我这个MySQL是区分大小写的。

2、解决方法

一 Ubuntu环境下:

vim /etc/mysql/my.cnf

在这个文件中的 [mysqld] 的后面加lower_case_table_names=1

注意:一定要在mysqld下面加上这个语句,别的下面不起作用!!!

然后重启MySQL环境即可。

一、启动方式


  1、使用 service 启动:service mysqld start


  2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start


  3、使用 safe_mysqld 启动:safe_mysqld&


二、停止


  1、使用 service 启动:service mysqld stop


  2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop


  3、mysqladmin shutdown


三、重启


  1、使用 service 启动:service mysqld restart


  2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart

二 其他环境下

如果上面设置的不行,可以试试以下路径:

echo "lower_case_table_names=1" >> /etc/mysql/mysql.conf.d/mysqld.cnf

即寻找/etc/mysql/mysql.conf.d/mysqld.cnf这个文件,后面加上lower_case_table_names=1即可。

更改设置之后的效果:

已经不区分大小写了:

拓展知识

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

MySQL在Windows下都不区分大小写

参考文章:

[Linux 搭建远程MySQL数据库]()

[MySQL数据库远程连接、创建新用户、设置权限]()

文章来源:浩Coding

最后修改:2022 年 05 月 27 日
如果觉得我的文章对你有用,请随意赞赏