首頁  >  文章  >  資料庫  >  詳細解讀MySql都有哪些頑疾

詳細解讀MySql都有哪些頑疾

藏色散人
藏色散人轉載
2021-09-17 16:50:291552瀏覽

1、預設編碼集問題

在做前台資料展示的時候,查詢全部select * from t_news可以查到所有內容。然後參數化查詢的時候就不行。例如:

Select * from t_news where title like ‘%原始碼教育%’;查到0條資料。

Select * from t_news where id = 1。查詢到1條資料。

注意標紅字段,這是我修改之後的,原來都是latin1。

解決方法:

Windows下MySQL的設定檔是my.ini,通常會在安裝目錄的根目錄。

Linux下MySQL的設定檔是my.cnf,一般會放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find指令找。

開啟my.ini/my.cnf修改以下兩個欄位。

Ps:修改設定檔過後需要重新啟動mysql。

2、資料不回滾

在程式設計的時候,spring配置了事務,但出現異常時候資料庫的資料依然改變。在確認事務和程式碼配置沒有問題的情況下,我們把可能性專項資料庫。我們使用”Navicat”工具設計表,在”選項”一欄中我們發現表使用的儲存引擎是MyISAM。

MyISAM不支援事務,回滾會造成不完全回滾,不具原子性。

將MyISAM改為InnoDB。

同樣在MySQL的設定檔(my.ini)中有預設的儲存引擎。在創建表的時候若沒有特別聲明,將使用預設的儲存引擎。

3、最佳化導入大量資料

在工作中我們難免會遇到資料的大量導入的情況。例如需要查詢先前備份的數據,將真實數據匯入到本地做測試,定期將數據匯入備份資料庫等等業務場景。

MySQL提供了load data infile的導入方式。但是配置不恰當同樣會導致導入速度不快。

解決方案:

將後面的參數值調大,一般為實體記憶體的百分之80%。但是32位元系統會被限制為2-3.5G。

4、開啟自訂函數功能(雲端資料庫)

有時候我們執行別人的程式碼,或是移植伺服器的時候可能會遇到資料庫先前定義的函數不能使用的情況。尤其是與資料庫,預設是沒有開啟函數功能,導致函數不執行。

首先我們先查看函數功能是否開啟。如下圖:

這裡自訂函數功能預設是關閉狀態。

解決方案:使用”set global log_bin_trust_function_creators = 1;”開啟自訂函數功能。

再次查詢:

但這種方式只是一個零時解決方案,在MySQL重新啟動以後,功能又會預設為關閉。

要永久開啟自訂函數功能,需要在設定檔中加入”log-bin-trust-function-creators=1”。

5、linux環境下表名大小寫問題

在linux系統環境下,MySQL表名預設會區分大小寫。有時候表名若輸錯一個大寫字母而導致查詢不出來的狀況。

解決方法:在my.cnf設定檔最後新增」lower_case_table_names=1」。然後重啟MySQL。

「lower_case_table_names=1        」這句話的意思是強制將輸入語句轉換為小寫,然後執行語句。

推薦學習:《mysql影片教學

#

以上是詳細解讀MySql都有哪些頑疾的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除