mysql8.0表名忽略大小写(Ubuntu24.04)
最近发现在ubuntu环境中mysql8默认是不忽略大小写的,这个在使用一些orm框架的时候可能会遇到一些问题,比如jpa会将表默认小写,如果数据库中的表是大写的这个时候就会报错: 表不存在。如何解决呢?
其实在数据库中无非是添加一个参数
## mysqld.cnf
[mysqld]
lower_case_table_names
这个参数有三个选项:
- 0 表名将按指定方式存储,并且比较是区分大小写的
- 1 表名以小写形式存储在磁盘上,比较不区分大小写
- 2 表名按给定形式存储,但以小写形式进行比较
但是这个参数必须是在mysql初始化之前指定,那么也就意味着需要重装mysql
1. 完全卸载mysql
sudo apt purge mysql-* -y sudo rm -rf /etc/mysql/ /var/lib/mysql sudo apt autoremove -y sudo apt autoclean -y
然后执行如下代码:
sudo dpkg -l | grep mysql
如果没有任何输出那么就已经完成卸载
2. 安装mysql
sudo apt-get update
sudo apt-get install mysql-server -y
1) 修改配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在末尾添加
lower-case-table-names=1
在这个时候初始化数据库并启动会报一下错误,因为ubuntu安装的时候自动生成了/var/lib/mysql文件夹以及部分默认数据文件,而这些文件默认值lower-case-table-names=0,这与我们配置的有冲突,在错误日志中可以看到一下报错信息:
[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
2)删除/var/lib/mysql,并重新创建
sudo rm -rf /var/lib/mysql
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 700 /var/lib/mysql
3)初始化数据库
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console
4)启动mysql服务
sudo service mysql start
5)获取默认密码,登录并且修改密码
sudo grep 'temporary password' /var/log/mysql/error.log
sudo mysql -u root -p
### mysql
alter user 'root'@'localhost' identified by '*******';
exit
6)初始化root用户(删除外部访问的root帐户、删除匿名帐户、删除测试数据库(默认情况下,所有用户,包括匿名用户都可以访问该数据库)以及相关权限)
sudo mysql_secure_installation
7)验证忽略大小写配置是否生效
show variables like 'lower_case%';
如果结果是如下,表示配置成功