CentOS下無法正常擷取MySQL資料庫表資料的問題

來源:互聯網
上載者:User
 

之前,由於客戶要求在centOS下安裝系統應用,因此有機會接觸了一下CentOS,順便也瞭解了下CentOS的常規操作,還有在CentOS下的MySQL相關操作。

目前技術架構使用JSF(richfaces、facelets)+Spring+JPA(OpenJPA),不使用資料庫依賴的觸發器或預存程序,所有商務邏輯在web伺服器上執行,因此資料庫基本不用考慮移植問題。但是本來在windows下運行正常的系統,在linux下卻沒法擷取一些表的內容。由於資料庫的初始化,最初只是體現在幾個需要手工維護的表資料上,最終卻發現原來是因為資料庫表名大小寫問題!

具體操作過程:

  1. 在windows下,使用MySQL的用戶端工具“Navicat”,將當前的資料庫匯出到test.sql檔案中。說明:匯出的.sql檔案中,所有的表名都是小寫。
  2. 將匯出的.sql檔案拷貝至linux下,匯入需要使用的資料庫中
  3. 啟動web伺服器,訪問服務。問題出現:許多表無法訪問。
  4. 在mysql中使用“show
    tables;”命令,發現表名有重複,重複的表名區別在於大小寫,大寫的表名與對應的實體bean名相同。找到問題:表名大小寫造成的資料無法訪問。(linux 下的 MySQL 安裝完後,預設區分表名的大小寫,不區分列名的大小寫;Windows下預設不區分大小寫 )

上述問題有兩種解決方案:

  • 在JPA的實體bean的聲明中,使用“Table”的“name”屬性,指定表名,表名盡量全部使用小寫,不同單詞之間使用底線串連(例如:@Table(name="sys_user")

  • 使用Linux下MySQL的相關參數,使MySQL不區分大小寫(
    lower_case_table_names=1

上述兩種方法,第一種是較為通用的解決方案,但是需要開發人員更改全部的實體bean,然後重新編譯;第二種方案適合於系統已經進入生產環境的狀況,並且對如何修改linux下的MySQL配置需要一定的專業知識及經驗,對實施人員技術要求較高。

關於如何修改CentOS下的MySQL不區分大小寫具體操作方法:

用 root 帳號登入後,在 /etc/my.cnf 中的 [mysqld] 後添加添加 lower_case_table_names=1 ,重啟Mysqld 服務。服務重新啟動之後,已設定成功:不區分表名的大小寫

關於lower_case_table_names 參數詳解: lower_case_table_names參數有兩個值:[0、1 ]其中 0 :區分大小寫, 1 :不區分大小寫

補充說明:

關於持久層,使用Spring自動產生的DDL來建立對應的持久層資料庫表及索引等資料,簡化實施工作的複雜度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.