问题描述
今天在做系统迁移的时候更换了数据库版本,表结构和数据都同步过去后项目死活起不来,总是报错 XXX 表不存在,检查数据源配置啥的都是没问题的!后面发现原来是表名大小写的原因,程序中使用的查询的 SQL 是 SELECT * FROM XXX
,但是数据库里面的表却是 xxx
,大小写不一样所以竟然报错表不存在!
解决方案
在 MySQL 数据库中,默认情况下,表名是区分大小写的。这意味着 MyTable
和 mytable
是两个不同的表名。然而,有时我们希望表名不区分大小写,即可以通过 SELECT * FROM MyTable
或 SELECT * FROM mytable
来访问同一个表。此时我们需要设置 MySQL 表名忽略大小写。
要配置 MySQL 忽略表名大小写,你需要进行以下步骤:
- 打开 MySQL 的配置文件。在 Ubuntu 上,该文件通常位于
/etc/mysql/mysql.conf.d/mysqld.cnf
,而在 CentOS 上,则是/etc/my.cnf
- 在配置文件中找到
[mysqld]
部分,并在该部分下添加或修改以下行:
lower_case_table_names = 1
- 保存并关闭配置文件。
- 重新启动 MySQL 服务以使更改生效。在 Ubuntu 上,可以使用以下命令:
sudo systemctl restart mysql
- 在 CentOS 上,可以使用以下命令:
sudo systemctl restart mysqld
做完上面的步骤之后就可以了!