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%';

  如果结果是如下,表示配置成功

 

查考文档: How to install MySQL 8.0 with lower_case_table_names=1 on Ubuntu Server 20.04 LTS successfully? - Ask Ubuntu

 

posted @ 2024-06-25 11:02  葬月!  阅读(743)  评论(0编辑  收藏  举报