mysql8.0表名忽略大小寫(Ubuntu24.04)

葬月!發表於2024-06-25

最近發現在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

相關文章