Linux下部署MySQL,大小寫敏感踩坑記錄

2022-03-26 10:28:10 字數 2324 閱讀 4479

今天在將開發環境中的門戶資料庫複製到新環境後,使用sqlsugar的orm框架進行資料庫操作的時候,出現了主鍵找不到的現象。排查了很久終於發現了關鍵點。特此記錄。

1.開發環境:

作業系統:centos7 64位

記憶體:    1gb

cpu     1/1

網路介面卡:網橋模式

安裝模式:最小化安裝

系統語言設定:zh_cn.gb2312

資料庫版本:mysql 5.6.29 binary 模式安裝

建立資料庫之前:my.cnf引數配置

character-set-server = utf8

log-bin=mysql-bin

skip-name-resolve

lower_case_table_names = 0  #之後可能設定過1的現象

開發資料庫例項名稱:goodmes_p_v0_5

資料庫例項中表名稱,列名稱 全部大寫

具體還經過哪些設定暫時不記得了,但是最終的結果是,不論sql語句中表名稱大小寫,都能查到資料。根據推測,資料庫大小寫也都能認識。對資料庫的操作是dos.orm

2.這次的部署環境:

作業系統:centos7 64位

記憶體:    1gb

cpu     1/1

網路介面卡:網橋模式

安裝模式:最小化安裝

系統語言設定:zh_cn.utf-8

資料庫版本:mysql 5.6.29 binary 模式安裝

資料庫例項名稱:g_start

資料庫例項中表名稱,列名稱 全部大寫

使用sqlsugar的orm框架進行資料庫操作的時候,出現了主鍵找不到的現象。通過記錄mysql日誌資訊,得到資料庫操作記錄資訊,發現sqlsugar的orm框架對資料庫的操作之前,必然都會將實體名稱,表名稱,列名稱全部轉換成大小寫。然而由於mysql預設設定的是大小寫敏感,故而找不到主鍵資訊。同時針對需要主鍵資訊來進行處理的內容,都會存在問題,因為sqlsugar的insingle操作或者其他的針對主鍵的操作,都會進行乙個獲取主鍵的動作,而這個獲取主鍵的動作是通過

select distinct table_name as tablename,column_name as keyname from information_schema.columns where table_name='" + tablename + "' and column_key='pri'這個sql語句來獲取的,雖然這裡的tablename傳入是正確的是表名稱,但是由於是被轉換成了小寫,所以這裡是查不到資料的。從而導致了找不到主鍵的情況(sqlsugar框架的坑還是大部分資料庫操作框架的坑?)。

查閱網上資訊,說可以通過設定lower_case_table_names這個資料庫的引數來進行設定,設定了lower_case_table_names=1(大小寫不敏感)乙個更嚴重的問題出現了,因為資料庫例項的名稱也是大寫的。但是sqlsugar同樣的進行了小寫化操作。所以資料庫仍然是找不到的,同樣的mysql客戶端在選擇該資料庫的時候,也出現了資料庫未找到的情況。

查詢mysql官網,lower_case_table_names有第三個引數:

0:預設值,大小寫敏感;請注意如果在大小寫不敏感的檔案系統上用--lower-case-table-names=0強制設為0,並且使用不同的大小寫訪問myisam表名,會導致索引破壞。

1:表名在硬碟上以小寫儲存,名稱對大小寫不敏感。mysql將所有表名轉換為小寫以便儲存和查詢

2:表名和資料庫名在硬碟上使用create table或create database語句指定的大小寫進行儲存,但mysql將它們轉換為小寫以便查詢。(這個操作需謹慎,因為一旦這樣設定了,那麼實際上就變成了表裡不一的情況,查詢問題就比較難了。)

很明顯我的目的是否能實現的最終拍板權還是檔案系統,無論我怎麼設定大小寫敏感還是大小寫不敏感,都無法對資料庫進行操作。區別點在於乙個是能連線到資料庫,乙個是連資料庫都找不到了。

所以我的最終結果是:

1.設定資料庫大小寫不敏感

2.重新配置乙個例項:例項名稱小寫

3.將開發環境中的資料表匯出乙份

4.將表結構匯入到部署環境,你會發現匯入後的表名都變成了小寫。但是表中的列的名稱仍然是大寫。

結論:在windows下mysql資料庫中例項,表,列的名稱都是大小寫不區分的,隨意折騰。但是到了類unix系統,比如ubuntu,centos,那麼在部署資料庫之前必須要謹慎考慮,是需要大小寫敏感還是大小寫不敏感。資料庫中例項,表,列名稱的命名是要用大寫的還是小寫的。萬一處理不好,最糟糕的可能就是資料庫重建。耗時耗力,還吃力不討好。

建議:命名全部小寫;建議區分大小寫。一旦設定,則不建議修改資料庫設定。同時在應用時選擇資料庫操作框架的時候,需要謹慎考慮。了解底層對資料庫的操作方式。

Linux系統下部署MySql區分大小寫問題

在linux系統,預設設定下 在windows系統,預設設定下 一 找到 etc my.cnf 二 在 mysqld 下加入如下 lower case table names 1三 重新啟動mysql服務 service mysqld stop service mysqld start四 再次檢視l...

linux下 部署免安裝mysql

官網 3.解壓 tar xzvf mysql 5.5.28 linux2.6 x86 64.tar.gz 4.修改解壓出來包的名稱 切換到 usr local目錄下 執行 mv mysql 5.5.32 linux2.6 x86 64 mysql 5.mysql會將預設的配置檔案儲存在mysql s...

linux下部署mysql資料庫

cd usr local src 建議放在這個目錄下面 wget tar zxf mysql 5.6.35 linux glibc2.5 x86 64.tar.gz 解壓 d usr local mysql mv usr local mysql usr local mysql old 判斷如果前面的...