MySql頑疾解讀

一、默認編碼集問題mysql

在作前臺數據展現的時候,查詢所有select * from t_news能夠查到全部內容。而後參數化查詢的時候就不行。好比:linux

Select * from t_news where title like ‘%源代碼教育%’;查到0條數據。spring

Select * from t_news where id = 1。 查詢到1條數據。sql

注意標紅字段,這是我修改以後的,原來都是latin1。數據庫

解決辦法:編程

Windows下MySQL的配置文件是my.ini,通常會在安裝目錄的根目錄。服務器

Linux下MySQL的配置文件是my.cnf,通常會放在/etc/my.cnf,/etc/mysql/my.cnf。若是找不到,能夠用find命令查找。函數

打開my.ini/my.cnf修改如下兩個字段。工具

Ps:修改配置文件事後須要重啓mysql。測試

二、數據不回滾

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

MyISAM不支持事務,回滾將形成不徹底回滾,不具備原子性。

將MyISAM改成InnoDB。

一樣在MySQL的配置文件(my.ini)中有默認的存儲引擎。在建立表的時候若沒有特別聲明,將使用默認的存儲引擎。

三、優化導入大量數據

在工做中咱們不免會遇到數據的大量導入的狀況。好比須要查詢之前備份的數據,將真實數據導入到本地作測試,按期將數據導入到備份數據庫等等業務場景。

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

解決方案:

將後面的參數值調大,通常爲物理內存的百分之80%。可是32位系統會被限制爲2-3.5G。

四、開啓自定義函數功能(雲數據庫)

有時候咱們運行別人的代碼,或者移植服務器的時候可能會遇到數據庫之前定義的函數不能使用的狀況。尤爲是與數據庫,默認是沒有開啓函數功能,致使函數不執行。

首先咱們查看函數功能是否開啓。以下圖:

這裏自定義函數功能默認是關閉狀態。

解決方案:使用」set global log_bin_trust_function_creators = 1;」開啓自定義函數功能。

再次查詢:

可是這種方式只是一個零時解決方案,在MySQL重啓之後,功能又會默認關閉。

要永久開啓自定義函數功能,須要在配置文件中加入」log-bin-trust-function-creators=1」。

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

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

解決辦法:在my.cnf配置文件最後添加」lower_case_table_names=1」。而後重啓MySQL。

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

相關文章
相關標籤/搜索